1.题目链接
点击这里
2.解题思路
pattern中字符构成的集合与所有单词构成的集合若形成双射,则匹配成功;否则匹配失败。用两个哈希表来记录映射关系,由于单个哈希表只能体现单向的映射关系(即只能反映A到B存在映射关系,即只能反映是否为满射,不能反映是否为单射)所以需要再来一个哈希表记录从B到A的映射关系,只由两个表对应且一一对应,才能说匹配成功。
3.代码
class Solution {
public:
bool wordPattern(string pattern, string s) {
unordered_map<string,char> mp;//s->pattern
unordered_map<char,string> np;//pattern->s
int i,j;
for(i=0,j=0;i<(int)pattern.size()&&j<(int)s.size();){
string mid="";
int k;
for(k=j;k<(int)s.size()&&s[k]!=' ';k++) mid+=s[k];
if(mp.count(mid)&&mp[mid]!=pattern[i]) return false;//不满足单射,当前单词相应的符号不是之前这个单词确定好的匹配符号
if( np.count(pattern[i])&&np[pattern[i]]!=mid ) return false;//同理,不满足单射
mp[mid]=pattern[i];
np[pattern[i]]=mid;
j=k+1;
i++;
}
return i>=(int)pattern.size()&&j>=(int)s.size();//需满足满射
}
};