尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

实用指南:LeetCode 面试经典 150_哈希表_单词规律(41_290_C++_简单)
📅 发布时间:2026/6/20 13:59:18

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

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)原题链接
欢迎大家和我沟通交流(✿◠‿◠)

相关新闻

  • 代码随想录算法训练营第二天 | leetcode 209
  • mpv硬件解码
  • 2025.9.78——卷6-8选择

最新新闻

  • 2026 年吉林市厨卫屋顶防水修缮三家对比测评 吉修匠 99.8 分稳居榜首 - 吉修匠
  • 企业境外投资证书丢失怎么登报?2026最新办理流程 - 速递信息
  • 2026 国内论文辅导机构行业盘点:5 家实测机构与甄选攻略 - 艾德思Editsprings
  • 2026 630~650分段人工智能AI专业985高校适配指南:中南大学人工智能领域专业实力解析 - 温茶叙旧
  • 从Keil仿真到逻辑分析仪:嵌入式调试的双重验证实战
  • 2026年烟台青少年信奥编程培训权威推荐 - 谁都没有我好看

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号