之所以要两个哈希表验证的原因是防止出现以下这个情况:
“abba” “dog dog dog dog”
class Solution {
public:
bool wordPattern(string pattern, string str) {
if (str.empty() && pattern.empty())
return true;
if (str.empty() || pattern.empty())
return false;
str += " ";//字符串str结尾补充一个空字符便于后续划分
int i = 0, begin = 0;
vector<string>v;
while (i != str.size())
{
if (str[i] != ' ')
i++;
else//遇到空格开始切分
{
v.push_back(str.substr(begin, i - begin));
begin = i + 1;
i++;
}
}
if (v.size() != pattern.size())
return false;
unordered_map<char, string> map1;
unordered_map<string, char> map2;
for (int i = 0; i < pattern.size(); i++)//验证pattern到str的映射关系
{
if (map1.find(pattern[i]) != map1.end())
{
if (map1[pattern[i]] != v[i])
{
return false;
}
}
else
{
map1[pattern[i]] = v[i];
}
}
for (int i = 0; i < v.size(); i++)//验证str到pattern的映射关系
{
if (map2.find(v[i]) != map2.end())
{
if (map2[v[i]] != pattern[i])
return false;
}
else
{
map2[v[i]] = pattern[i];
}
}
return true;
}
};