实现思路
利用map映射,将pattern中的字符映射到单词中,但实际上不仅要考虑这个映射,也要考虑单词映射到字符的情况,否则将无法识别:
“abba”
“dog dog dog dog”
这种情况;
除此之外,也要考虑,可能pattern中的字符个数和单词个数不匹配的问题
我的思路是单词映射到字符,字符映射到单词保证两者是一一对应的关系,而另一种思路是使用unsed标志数组来看字符是否在之前已经别的单词映射了来判断。
实现代码
class Solution {
public:
bool wordPattern(string pattern, string s) {
map<char,string> m;
map<string,char> m2;
int i=0,j=0;
while(i<pattern.length()&&j<s.length()){
string ss="";
while(s[j]!=' '&&j<s.length()){
ss+=s[j];
j++;
}
while(s[j]==' '&&j<s.length()) j++;
if(!m.count(pattern[i])&&!m2.count(ss)){
m[pattern[i]]=ss;
m2[ss]=pattern[i];
}else{
if(m[pattern[i]]!=ss) return false;
if(m2[ss]!=pattern[i]) return false;
}
i++;
}
return i==pattern.length()&&j==s.length();
}
};
这里面有一步骤,为了防止有多个空格进行分割的情况,我多设置了一小段代码,但在这题实际的测试用例中都是一个空格分割开的单词
提交结果及分析
时间复杂度O(n1+n2)