给定一种规律 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
包含了由单个空格分隔的小写字母。
需要注意pattern和str的个数是否相等
同时也要注意同一个char对应不同string或者同一个string对应不同char的问题;
class Solution {
public:
bool wordPattern(string pattern, string str) {
if (pattern.empty() && str.empty()) {
return true;
}
if (pattern.empty() || str.empty()) {
return false;
}
unordered_map<string, char> second;
unordered_map<char, string> first;
istringstream ss(str);
string temp;
for (int i = 0; i < pattern.size(); ++i) {
if (!(ss >> temp)) {
return false;
}
if (first[pattern[i]].size()) {
if (first[pattern[i]] != temp) {
return false;
}
if (second[temp] == ' ' || second[temp] != pattern[i]) {
return false;
}
} else {
if (second[temp]) {
return false;
}
first[pattern[i]] = temp;
second[temp] = pattern[i];
}
}
if (ss >> temp) {
return false;
}
return true;
}
};