自学内容网 自学内容网

【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 False
        
        for word,ch in zip(words,pattern):#键值对
            if(word in str2ch and str2ch[word]!=ch or ch in ch2str and ch2str[ch]!=word):
                return False
            str2ch[word]=ch
            ch2str[ch]=word
​
        return True

参考文献

力扣面试经典150题

力扣官方题解


原文地址:https://blog.csdn.net/Junmo12345/article/details/142487581

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!