算法-单词规律(290)

news2024/12/23 10:42:59

leetcode题目链接 

这道题用哈希表来解决 一个哈希表存放从单词到字符的映射,一个存放从字符到单词的映射,依照空格分隔字符,并将每个字符存放到vector字符数组,

遍历 pattern,对于每个字符 c 和对应的单词 w

检查 charToWord 中是否已经存在映射,若存在且不匹配则返回 false

检查 wordToChar 中是否已经存在映射,若存在且不匹配则返回 false

否则,建立新的映射。

遍历结束没有发现不匹配,则返回true。

代码如下:

class Solution {
public:
    bool wordPattern(string pattern, string s) {
   unordered_map<char, string> charToWord;
    unordered_map<string, char> wordToChar;
    vector<string> words;
    int pos = 0, start = 0;

    // 用空格分割字符串 s
    while ((pos = s.find(' ', start)) != string::npos) {
        words.push_back(s.substr(start, pos - start));
        start = pos + 1;
    }
    words.push_back(s.substr(start));

    // 如果单词数量和模式长度不匹配,返回 false
    if (words.size() != pattern.length()) {
        return false;
    }

    for (int i = 0; i < pattern.length(); ++i) {
        char c = pattern[i];
        string w = words[i];

        // 检查字符是否已映射到某个单词
        if (charToWord.find(c) != charToWord.end()) {
            if (charToWord[c] != w) {
                return false; // 不匹配返回 false
            }
        } else {
            charToWord[c] = w; // 新映射
        }

        // 检查单词是否已映射到某个字符
        if (wordToChar.find(w) != wordToChar.end()) {
            if (wordToChar[w] != c) {
                return false; // 不匹配返回 false
            }
        } else {
            wordToChar[w] = c; // 新映射
        }
    }

    return true;
    }
};

这里的s.find('',start)即从start的位置找到第一个空格的位置。

string::npos 是一个常数,表示查找操作未找到时的返回值。它通常用于判断 find 方法是否成功找到指定字符或子字符串。如果 find 返回 string::npos,意味着未找到。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2077210.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

带你快速了解WEB应用服务器TOMCAT

目录 一、WEB技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS&#xff08;Cascading Style Sheets&#xff09;层叠样式表 1.2.3 JavaScript 二 WEB框架 2.1 web资源和访问 2.2 后台应用架构 2.2.1 单体架构 2.2.2 微服务 2.2.3 单体架构和…

机器学习 第6章 支持向量机

这里写目录标题 6.1 间隔与支持向量6.2 对偶问题6.3 核函数6.4 软间隔与正则化6.5 支持向量回归 6.1 间隔与支持向量 给定训练样本集 D { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) } , y i ∈ { − 1 , 1 } D\left \{ (x_{1},y_{1}),(x_{2},y_{2}) ,...,(x_{…

禹晶、肖创柏、廖庆敏《数字图像处理》Otsu方法描述勘误

最大化类间距离准则与最小错误率准则不等价。 虚线处为最大类间距离&#xff0c;前景与背景直方图的交界处为最小错分概率&#xff0c;当部分前景错分为背景或者部分背景错分为前景时&#xff0c;一般会导致类间距离变小。所以两者接近&#xff0c;但不相等。 禹晶、肖创柏、…

《Spring Boot 集成 Swagger:打造高效接口文档与开发体验》

Swagger 一.导语&#xff1a; ​ 相信无论是前端还是后端开发&#xff0c;都或多或少地被接口文档折磨过。前端经常抱怨后端给的接口文档与实际情况不一致。后端又觉得编写及维护接口文档会耗费不少精力&#xff0c;经常来不及更新。其实无论是前端调用后端&#xff0c;还是后…

MindSearch 部署

任务 按照教程&#xff0c;将 MindSearch 部署到 HuggingFace 并美化 Gradio 的界面&#xff0c;并提供截图和 Hugging Face 的Space的链接。 创建开发机 & 环境配置 mkdir -p /root/mindsearch cd /root/mindsearch git clone https://github.com/InternLM/MindSearch.…

dbsyncer同步mysql数据

1 概述 DBSyncer&#xff08;代码地址&#xff1a;https://github.com/86dbs/dbsyncer&#xff09;是一款开源的数据同步中间件&#xff0c;提供MySQL、Oracle、SqlServer、PostgreSQL、Elasticsearch(ES)、Kafka、File、SQL等同步场景。支持上传插件自定义同步转换业务&#…

人脸质量评价:深入解析和实现

人脸质量评价&#xff1a;深入解析和实现 引言 随着人工智能和计算机视觉技术的飞速发展&#xff0c;人脸识别已成为许多领域的关键技术之一。然而&#xff0c;人脸识别的准确性高度依赖于输入的人脸图像质量。因此&#xff0c;人脸质量评价作为人脸识别前的预处理步骤&#…

如何利用电商 API 数据分析助力精准选品!

电商 API 数据分析在选品过程中起着至关重要的作用&#xff0c;它们之间有着密切的关系&#xff1a; 一、提供市场趋势洞察 热门商品识别&#xff1a; 通过分析电商 API 中的销售数据&#xff0c;包括商品的销售量、销售额、销售频率等指标&#xff0c;可以快速准确地识别出当…

清华计算几何-线段求交与BO算法

单轴线段求交 给定单边轴下, N定线段&#xff0c;检查出相交的线段. 解法一: 暴力求解 遍历所有线段对&#xff0c;进行相交判断, 算法复杂度为O(n2) 解法二: LR扫描 把每条线段的头尾认定为L和R。对所有点进行排序&#xff0c;如果每两个点满足LL或者RR&#xff0c;则对应…

Leetcode JAVA刷刷站(97)交错字符串

一、题目概述 二、思路方向 为了验证字符串 s3 是否由 s1 和 s2 交错组成&#xff0c;我们可以使用动态规划&#xff08;Dynamic Programming, DP&#xff09;的方法来解决这个问题。 首先&#xff0c;我们需要定义状态 dp[i][j]&#xff0c;它表示 s1 的前 i 个字符和 s2 的前…

DocuSign集成方案 | 结合 DocuSign 与 Oracle,加快业务完成速度!

DocuSign for Oracle 集成将 DocuSign 的电子签名功能与 Oracle 的项目生命周期管理 (PLM) 解决方案相结合 DocuSign 和 Oracle 是两家全球领先的技术公司&#xff0c;它们都致力于帮助企业简化和自动化流程。DocuSign 是电子签名领域的领导者&#xff0c;其解决方案可帮助企业…

【操作系统】实验:进度调度(2)

目录 一、实验目的 二、实验要求 三、实验步骤 四、核心代码 五、记录与处理 六、思考 七、完整报告和成果文件提取链接 一、实验目的 1、掌握高优先权调度算法 2、理解时间片、优先权、抢占等基本概念。 二、实验要求 1. 优先权属于静态优先权&#xff1b; 2. 进入 …

DevOps实现CI/CD实战(五)- Jenkins流水线Pipeline-更新中..

九、 Jenkins流水线pipeline Jenkins流水线任务介绍 之前采用Jenkins的自由风格构建的项目&#xff0c;每个步骤流程都要通过不同的方式设置&#xff0c;并且构建过程中整体流程是不可见的&#xff0c;无法确认每个流程花费的间&#xff0c;并且问题不方便定位问题。Jenkins的…

工程数学与数学建模在编程与算法设计中的应用(下)

目录 引言 第三部分&#xff1a;工程数学在算法设计与优化中的应用 3.1 微分方程与动力系统模拟 常微分方程&#xff08;ODE&#xff09;在动态系统中的应用 偏微分方程&#xff08;PDE&#xff09;在图像处理与物理模拟中的应用 总结 3.2 概率论与数理统计在机器学习中的…

若依将登录用户的userId自动加载到查询中

点击搜索&#xff0c;会将登录用户的userId作为搜索条件&#xff0c;去查询。 新版本自动存储了userId&#xff0c;我们不用改&#xff0c;只要知道如何引用。 前端使用 在对应的vue文件&#xff0c;查询queryParams 加查询的值 然后参考他的 添加store import store from &…

i.MX6裸机开发(11)——DDR测试

本章参考资料&#xff1a;《IMX6ULRM》(参考手册)。 学习本章时&#xff0c;配合《IMX6ULRM》Chapter 33: Multi Mode DDR Controller (MMDC) 一起阅读&#xff0c;效果会更佳&#xff0c;特别是涉及到寄存器说明的部分。 特别说明&#xff0c;本书内容是以i.MX6U系列控制器资…

Serdes系统中的CTLE技术

典型的SerDes系统包含输入数据、串行器、发射机&#xff08;TX&#xff09;、信道、接收机&#xff08;RX&#xff09;、解串器和输出数据。串行数据比特流被输入到发送器。发射机由均衡器&#xff08;EQ&#xff09;和包括封装效果的线性模拟后端组成。传输后端和接收器前端之…

JAVA语言开发环境配置详细讲解

​ ​ 您好&#xff0c;我是程序员小羊&#xff01; 前言 Java是一门广泛应用于软件开发领域的编程语言&#xff0c;自1995年由Sun Microsystems首次发布以来&#xff0c;经过多年的发展&#xff0c;已经成为业界的重要编程语言之一。Java以其“编写一次&#xff0c;到处运行”…

【计算机网络】电路交换、报文交换、分组交换

电路交换&#xff08;Circuit Switching&#xff09;&#xff1a;通过物理线路的连接&#xff0c;动态地分配传输线路资源 ​​​​

IDEA/Pycharm/Goland/jetbrains2024.2全家桶汉化失败问题解决

近期,jetbrains全家桶更新到了2024.2版本,不少人反馈到,下载安装之后,按照以前的汉化方式进行汉化的之后,并没有生效。本章教程,提供此问题的解决方案,亲测有效。 JetBrains 是一家总部位于捷克布拉格的软件开发公司,成立于 2000年。该公司以开发高效、智能的开发工具和…