用两个哈希表分别存放字符-单词,单词-字符。然后遍历判断是否出现冲突。
切割字符串可用strtok。
class Solution {
public:
bool wordPattern(string pattern, string str) {
char cstr[str.size()+1];
strcpy(cstr,str.c_str());
map<char,string> mpa;
map<string,char> mpb;
char *p=strtok(cstr," ");
int i=0;
while(p!=NULL&&i<pattern.size())
{
map<char,string>::iterator ia=mpa.find(pattern[i]);
string sb(p);
map<string,char>::iterator ib=mpb.find(sb);
if(ia==mpa.end()&&ib==mpb.end())
{
mpa[pattern[i]]=sb;
mpb[sb]=pattern[i];
}
else if(ia!=mpa.end()&&ib!=mpb.end())
{
if(ia->second!=ib->first||ia->first!=ib->second)
return false;
}
else
return false;
++i;
p=strtok(NULL," ");
}
return p==NULL&&i==pattern.size();
}
};