实用指南:LeetCode 面试经典 150_哈希表_单词规律(41_290_C++_简单)

news/2025/9/18 21:37:46/文章来源:https://www.cnblogs.com/lxjshuju/p/19099775

LeetCode 面试经典 150_哈希表_单词规律(41_290_C++_简单)

    • 题目描述:
    • 输入输出样例:
    • 题解:
      • 解题思路:
        • 思路一(哈希表):
      • 代码实现
        • 代码实现(思路一(哈希表)):
        • 以思路一为例进行调试

题目描述:

给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。

这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。

输入输出样例:

示例 1:
输入:pattern = “abba”, s = “dog cat cat dog”
输出:true

示例 2:
输入:pattern = “abba”, s = “dog cat cat fish”
输出:false

示例 3:
输入:pattern = “aaaa”, s = “dog cat cat dog”
输出:false

提示:
1 <= pattern.length <= 300
pattern 只包含小写英文字母
1 <= s.length <= 3000
s 只包含小写英文字母和 ’ ’
s 不包含 任何前导或尾随对空格
s 中每个单词都被 单个空格 分隔

题解:

解题思路:

思路一(哈希表):

1、具体思路如下:
判断 pattern 中的字符c 与 s中对应的字符串 str 是否对应。
①、c 之前存在映射关系
        之前的映射关系与 c:str 相同,继续判断pattern中剩余字符
        之前的映射袁旭与 c:str 不同,返回false
②、c 之前不存在映射关系
        str 不存在之前的映射关系中,建立映射关系 c:str
        str 存在之前的映射关系中,返回false
2、复杂度分析:
① 时间复杂度:O(n + m),其中n是字符串s的长度,m是pattern的长度。在循环中使用ss >> str因此整个字符串的处理是O(n),遍历pattern中的每个字符进行匹配O(m)。
② 空间复杂度:O(n + m),stringstream的消耗和需要存储pattern中的字符映射和s中的单词。

代码实现

代码实现(思路一(哈希表)):
class Solution
{
public:
bool wordPattern(string pattern, string s) {
stringstream ss(s);
// 使用stringstream将输入字符串s分割成单词
unordered_map<
char, string> mp;
// 用于存储字符和单词的映射关系
unordered_set<string> set;// 用于检查一个单词是否已经被映射string str;for (int i = 0; i < pattern.size(); i++) {// 遍历pattern中的每个字符ss >> str;// 从stringstream中读取一个单词if (mp.count(pattern[i])) {// 如果当前字符已经有映射if (mp[pattern[i]] != str) {// 检查当前字符映射的单词是否与当前单词相同return false;// 如果不同,则返回false}} else {if (set.count(str)) {// 如果当前单词已经被其他字符映射过return false;// 如果是重复的单词,返回false}mp[pattern[i]] = str;// 为当前字符创建一个新的映射关系set.insert(str);// 将当前单词添加到set中,确保它不会被重复映射}}if (ss >> str) return false;// 如果在读取完所有pattern字符后仍有剩余的单词,则返回false,表示长度不匹配return true;// 如果所有检查都通过,返回true}};
以思路一为例进行调试
#include<iostream>#include<unordered_map>#include<unordered_set>#include<sstream>using namespace std;class Solution{public:bool wordPattern(string pattern, string s) {stringstream ss(s);// 使用stringstream将输入字符串s分割成单词unordered_map<char, string> mp;// 用于存储字符和单词的映射关系unordered_set<string> set;// 用于检查一个单词是否已经被映射string str;for (int i = 0; i < pattern.size(); i++) {// 遍历pattern中的每个字符ss >> str;// 从stringstream中读取一个单词if (mp.count(pattern[i])) {// 如果当前字符已经有映射if (mp[pattern[i]] != str) {// 检查当前字符映射的单词是否与当前单词相同return false;// 如果不同,则返回false}} else {if (set.count(str)) {// 如果当前单词已经被其他字符映射过return false;// 如果是重复的单词,返回false}mp[pattern[i]] = str;// 为当前字符创建一个新的映射关系set.insert(str);// 将当前单词添加到set中,确保它不会被重复映射}}if (ss >> str) return false;// 如果在读取完所有pattern字符后仍有剩余的单词,则返回false,表示长度不匹配return true;// 如果所有检查都通过,返回true}};int main(int argc, char const *argv[]){string pattern="abba";string s="dog dog dog dog";Solution s1;if (s1.wordPattern(pattern,s)){cout<<"true"<<endl;}else{cout<<"false"<<endl;}return 0;}

LeetCode 面试经典 150_哈希表_单词规律(41_290)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

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

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

相关文章

代码随想录算法训练营第二天 | leetcode 209

长度最小的子数组(没做出来) 题目要求:寻找一个数组中满足大于等于目标要求的最小子数组 解题思路:返回结果可能是不存在,所以需要定义一个合适的初始值,可以使用java的最大数Integer.MAX_VALUE,然后使用滑动窗…

mpv硬件解码

mpv --hwdec=yes --vo=vappi 3e559881c836c30321894b20ae102c4e.mp4

2025.9.78——卷6-8选择

卷6选择 大O表示法 大O表示法由​​德国数学家保罗巴赫曼(Paul Bachman)提出,用于表示算法的最坏情况下时间复杂度 Θ表示法 Θ表示法通常归功于​​计算机科学家Donald Knuth​​等人,用于描述算法的平均时间复杂…

07-日期和时间相关函数

07-日期和时间相关函数$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");获取当前日期和时间now()和sysdate()的区别:now():获取的是执行select语句的时刻。…

关于pytorch的读书报告

PyTorch 读书报告 一、引言 PyTorch 是由 Facebook(现 Meta)人工智能研究实验室开发的一款开源机器学习框架,自 2016 年推出以来,凭借其动态计算图特性、简洁直观的 API 设计以及强大的生态系统,迅速成为学术界和…

Emacs 折腾日记(三十)——打造C++ IDE 续

上一篇博客中,我完成了C++ IDE初步工作,包括代码的高亮、折叠、跳转以及补全等工作。但是作为IDE来说功能还有点不够,就我个人而言作为IDE来说它还需要具备一键编译运行和调试功能。这篇文章就来记录我是如何实现上…

数据结构 项目一

一:数据结构的基本概念 数据结构----研究数据的特性及数据之间存在的关系 算法+数据结构=程序。其中数据结构是指数据逻辑结构和物理结构,算法是对数据运算的描述。 用计算机解决一个具体问题时,首先从具体问题中抽…

好烦

我不行了,一做初赛题就有一种莫名其妙的烦躁,根本就写不进去,一点都冷静不下来

完整教程:.NET驾驭Word之力:玩转文本与格式

完整教程:.NET驾驭Word之力:玩转文本与格式2025-09-18 21:15 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: b…

用 Go 语言与 Tesseract OCR 识别英文数字验证码

一、安装与配置 安装 Tesseract OCR 你需要先安装 Tesseract OCR 引擎。具体步骤如下: Ubuntu: 更多内容访问ttocr.com或联系1436423940 sudo apt-get update sudo apt-get install tesseract-ocr macOS: brew instal…

FreeRTOS和LVGL组合使用教程

前言 关于这两者组合使用的教程,网上可以说是各种方法都有,移植的时候我也有遇到各种问题,在此处记录一下解决过程 问题 栈空间的分配问题 FreeRTOS和LVGL的栈分配都尽量多一点,不然后面的任务可能创建失败 lvgl心…

Codeforces 1646 记录

目录C. Factorials and Powers of Two / 阶乘数与二的幂 D. Weight the Tree / 树上赋权 E. Power Board / 乘方表 F. Playing Around the Table / 圆桌打牌C. Factorials and Powers of Two / 阶乘数与二的幂 题意简述…

综合与实现流程【p3】--(DSP-存储)优化PS系统集成

(一)资源优化 1 DSP优化 创建优化的DSP映射 创建文件 dsp_optimized_pe.v: `timescale 1ns / 1ps ////////////////////////////////////////////////////////////////////////////////// // 优化的PE模块 - 直接使…

Linux中 sed命令忽略大小写匹配

001、[root@localhost test]# ls a.txt [root@localhost test]# cat a.txt ## 测试数据 22 abc44 88 32 ABC11 43 14 aBc44 86 [root@localhost test]# sed -n /abc/p a.txt ## 匹配abc 22 abc44 88 [r…

VISA Resource name

VISA Resource name📌 步骤放置 VISA Open在 Block Diagram 放一个 VISA Open 节点。Resource name 输入 TCPIP0::192.168.2.121::inst0::INSTR(就是你之前的地址)。VISA Write在 VISA Open 的 session 输出连到 V…

【STL库】哈希封装 unordered_map/unordered_set - 教程

【STL库】哈希封装 unordered_map/unordered_set - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…

Docker 常用命令详解与参数说明 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

7zip压缩解压缩-测试CPU性能

前言全局说明在B站刷大佬视频的时候,看到UP在Debign linux 上用7z测试CPU性能,惊讶,7z还有这功能。 赶快打开手边的电脑,看看 Windows 上的 7z 有没有这功能,一用,果然有这个功能。 以前想知道CPU性能就只能装些…

交叉编译openharmony版本的gdb

1465 cd ../gmp-6.3.0/ 1466 ./configure --prefix=/system/ CC=aarch64-linux-gnu-gcc --build=`./config.guess` --target=aarch64-linux-gnu --host=aarch64-linux-gnu 1467 make 1468 …

高数

1 求 \(\lim_{n\to\infty}\left(1-\frac 1n\right)^{n^2}\) 解: 首先证明 \(\lim_{n\to\infty}\left(1-\frac 1n\right)^{n}=e^{-1}\)。 \[\begin{align*} \lim_{n\to\infty}\left(1-\frac 1n\right)^{n} &=\lim_…