290 单词规律 给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。 这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = "abba", str = "dog cat cat dog"
输出: true
示例 2:
输入:pattern = "abba", str = "dog dog dog dog"
输出: false
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/word-pattern
解题思路:哈希表,双向映射,双指针遍历规律与给定字符串,将字母与字符串一一对应起来,当长度不对应或者映射关系不同时,则返回false。
class Solution {
public:
bool wordPattern(string pattern, string s) {
unordered_map<char,string> ch2str;
unordered_map<string,char> str2ch;
int i =0;
//cout<<s.size()<<endl;
for(auto ch:pattern){
//cout<<ch<<endl;
if(i>= s.size()) return false;
int j =i;
while(j<s.size() && s[j]!=' ') ++j;
string sub_s = s.substr(i,j-i);
//cout<< sub_s<<endl;
if(ch2str.find(ch)!= ch2str.end() && ch2str[ch]!= sub_s)
return false;
if(str2ch.count(sub_s) && str2ch[sub_s]!= ch)
return false;
ch2str[ch] = sub_s;
str2ch[sub_s] =ch;
i = j+1;
}
cout<<i<<endl;
return i>s.size();
}
};
class Solution:
def wordPattern(self, pattern: str, s: str) -> bool:
ch2str = dict()
str2ch = dict()
words = s.split(' ')
print(words)
i = 0
for ch in pattern:
if i>= len(words): return False
if ch in ch2str and ch2str[ch] != words[i]: return False
if words[i] in str2ch and str2ch[words[i]] != ch: return False
ch2str[ch] = words[i]
str2ch[words[i]] = ch
i +=1
return i>= len(words)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42281215/article/details/111246212