原文题目:
读题:
看到这种一一映射,很自然想到STL中的map容器
具体解题思路看代码注释
class Solution
{
public:
bool wordPattern(string pattern, string str)
{
unordered_map <char,string> mapleft;
unordered_map <string,char> mapright;
vector <string> vec;
int i = 0;
int j = 0;
//将字符串按照空格分割放入容器vec中
for(;i<str.size();i++)
{
if(' '==str[i])
{
string tempstr = str.substr(j,i-j);
vec.push_back(tempstr);
j = i +1;
}
if(i == str.size() - 1)
{
string endstr = str.substr(j,i-j+1);
vec.push_back(endstr);
}
}
if(pattern.size()!=vec.size()) return false;
//建立两者之间的正序和反序的map映射
for(i = 0;i <pattern.size();i++)
{
//若原map中没有则加入
if(mapleft.find(pattern[i]) == mapleft.end()&&mapright.find(vec[i]) == mapright.end())
{
mapleft.insert(make_pair(pattern[i],vec[i]));
mapright.insert(make_pair(vec[i],pattern[i]));
}
//查找map看是否一一相对应
else if(mapleft[pattern[i]]!=vec[i] || mapright[vec[i]]!=pattern[i])
{
return false;
};
}
return true;
}
};