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

【LeetCode面试150】——209单词规律

博客昵称:沈小农学编程

作者简介:一名在读硕士,定期更新相关算法面试题,欢迎关注小弟!

PS:哈喽!各位CSDN的uu们,我是你的小弟沈小农,希望我的文章能帮助到你。欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘

题目难度:简单

默认优化目标:最小化时间复杂度。

Python默认为Python3。

目录

1 题目描述

2 题目解析

3 算法原理及代码实现

参考文献


1 题目描述

给定一种规律 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 中每个单词都被 单个空格 分隔

2 题目解析

输入是两个字符串pattern和s,pattern表示规律,s是字符串。输出是布尔值。约束条件是判断s是否符合规律pattern,是返回true,否返回false。

3 算法原理及代码实现

该题目等价于pattern中的单词和s中的单词一一对应,用空格来区分单词。我们创建两个哈希表str2ch和ch2str,用来记录这种对应关系。如果它们不是一一对应关系,返回false;否则返回true。

时间复杂度为O(n+m),n为pattern的长度,m为s的长度。空间复杂度为O(n+m)。

C++代码实现

class Solution {
public:bool wordPattern(string pattern, string s) {unordered_map<string, char> str2ch;unordered_map<char, string> ch2str;int i=0;int m=s.size();
​for(auto ch : pattern){if(i>=m){//i=0开始return false;}int j=i;while(j<m && s[j]!=' ') j++;const string &tmp=s.substr(i,j-i);//避免拷贝if(str2ch.count(tmp) && str2ch[tmp]!=ch){return false;}if(ch2str.count(ch) && ch2str[ch]!=tmp){return false;}str2ch[tmp]=ch;//哈希表赋值ch2str[ch]=tmp;i=j+1;}
​return i>=m;
​}
​
};

Python代码实现

class Solution:def wordPattern(self, pattern: str, s: str) -> bool:str2ch=dict()#用字典构建哈希表ch2str=dict()words=s.split()
​if(len(words)!=len(pattern)):return Falsefor word,ch in zip(words,pattern):#键值对if(word in str2ch and str2ch[word]!=ch or ch in ch2str and ch2str[ch]!=word):return Falsestr2ch[word]=chch2str[ch]=word
​return True

参考文献

力扣面试经典150题

力扣官方题解


http://www.mrgr.cn/news/35007.html

相关文章:

  • 【Python报错已解决】AttributeError: ‘Tensor‘ object has no attribute ‘kernel_size‘
  • 人生苦短,我用Python✌
  • markdown support in emacs
  • 【C++】容器适配器,stack,queue,priority_queue详解,模拟实现
  • 召回04 离散特征的处理
  • HyperWorks的实体几何创建与六面体网格剖分
  • 初识前端监控
  • 探秘链表:十大经典题目全解析
  • 使用 UWA Gears 测试小游戏性能
  • 828华为云征文 | 在华为云上通过Docker容器部署Elasticsearch并进行性能评测
  • vue2 实现简易版的模糊查询功能
  • 1.1 HuggingFists简介(二)
  • 华为云长江鲲鹏深度赋能,大势智慧稳居“实景三维+AI”领域排头兵
  • 解决银河麒麟桌面操作系统V10SP1 SSH连接“connection reset by ip地址 port 22”问题
  • Qt 每日面试题 -3
  • Linux:文件描述符详解
  • RocketMQ简介与应用场景
  • x-cmd pkg | hurl - 强力的 HTTP 请求测试工具,让 API 测试更加简洁和高效
  • PCIe configuration 包分析
  • 【深度学习|地学应用】glacier——让我们一起看看深度学习在冰川研究中的应用是怎么样的呢?