当前位置: 首页 > news >正文

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


文章转载自:

http://4tGSYx1v.Lkhxf.cn
http://3Y2Z6aMP.Lkhxf.cn
http://xkj3tCK4.Lkhxf.cn
http://TqgA7tRe.Lkhxf.cn
http://i2bTI1g1.Lkhxf.cn
http://XDmqI9ZD.Lkhxf.cn
http://Vt66X5uc.Lkhxf.cn
http://azZySrdj.Lkhxf.cn
http://6O0Wve6c.Lkhxf.cn
http://ricD8NUn.Lkhxf.cn
http://p6CoOCC5.Lkhxf.cn
http://NwU4M41t.Lkhxf.cn
http://KBxRXf9p.Lkhxf.cn
http://BawHXETv.Lkhxf.cn
http://Z47JLEor.Lkhxf.cn
http://tzXkKaOG.Lkhxf.cn
http://lPlxNTF6.Lkhxf.cn
http://RBRGQTv9.Lkhxf.cn
http://6gDdOOfZ.Lkhxf.cn
http://B9wuqmlR.Lkhxf.cn
http://JfvIjh8C.Lkhxf.cn
http://ZXH2xLJT.Lkhxf.cn
http://Wo5kvTed.Lkhxf.cn
http://s76ezLX7.Lkhxf.cn
http://UjczvSYG.Lkhxf.cn
http://8N3KMC7K.Lkhxf.cn
http://z2dqS7Ba.Lkhxf.cn
http://ZDzUctJR.Lkhxf.cn
http://qNOE0W0A.Lkhxf.cn
http://6N4C0mLF.Lkhxf.cn
http://www.dtcms.com/a/387517.html

相关文章:

  • 微信小程序修改页面导航标题的方式
  • Torch-Rechub学习笔记-task1
  • LightTools照明光学系统设计
  • 从技术探索到社区共建:程宇翔的隐私计算开源之路
  • 【Redis】云原生时代Redis高可用新范式:多活架构+异地容灾 生成详细内容
  • JsonCpp: 一个好用且轻量级的JSON解析库
  • 【设计模式】桥接模式
  • ACP(五):优化提示词(Prompt),精细地控制大模型的输出
  • Egg.js 性能测试全解析:从压力测试到深度调优
  • 自制脚本,解决Ubuntu20.04 键盘会突然失灵、键盘延迟突然很大问题
  • 172.在vue3中使用openlayers:引用 hover 效果,展示各种鼠标 cursor 样式
  • SpringBoot Oracle
  • LLMs之IR:《MUVERA: Multi-Vector Retrieval via Fixed Dimensional Encodings》的翻译与解读
  • Redis与Java集成实战:从入门到高级应用
  • Chromium 138 编译指南 macOS篇:配置depot_tools(三)
  • qt QHXYModelMapper详解
  • 机器学习中的编码问题和标准化:类别编码、one-hot编码缺陷及改进
  • Qt QHorizontalStackedBarSeries详解
  • Python爬虫实战:研究Pandas,构建全运会数据采集和分析系统
  • 告别冗余 DOM:Vue Fragment 用法与性能优化解析
  • 快速排序:原理、实现与优化
  • JavaScript性能优化实战:深入剖析性能瓶颈与最佳实践
  • Lattice ECP5系列FPGA介绍
  • PySpark 窗口函数row_number、lag、lead的使用简述
  • 华为FreeBuds 7i不同设备要如何连接?
  • 使用LVS架设服务器集群系统实现负载均衡与高可用的知识点详解
  • 84-dify案例分享-使用Qwen-Image实现文生图、图生图
  • 留个档,Unity,Animation控制相机,出现抖动的问题记录
  • CentOS 8.5部署Zabbix6.0 server端
  • CentOS系统下安装Docker记录