给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = "abba", str = "dog cat cat dog"
输出: true
示例 2:
输入:pattern = "abba", str = "dog cat cat fish"
输出: false
示例 3:
输入: pattern = "aaaa", str = "dog cat cat dog"
输出: false
示例 4:
输入: pattern = "abba", str = "dog dog dog dog"
输出: false
说明:
你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。
class Solution {
public:
bool wordPattern(string pattern, string s) {
unordered_map<char, string> rec;
unordered_set<string> check;
int i = 0, j = 0, pCount = 0, sCount = 0;
for(; i < pattern.size(); ++i){
while(s[j] == ‘ ‘) ++j;
string str;
for(; j < s.size(); ++j){
if(s[j] == ‘ ‘) break;
str += s[j];
}
if(str == "") return false;
if(rec.count(pattern[i]) == 0){
if(check.count(str) != 0) return false;
check.insert(str);
rec[pattern[i]] = str;
}else{
if(rec[pattern[i]] != str) return false;
}
}
if(j != s.size() || i != pattern.size()) return false;
return true;
}
};
原文:https://www.cnblogs.com/wasi-991017/p/14141960.html