先把str以空格分开,存入s中,再利用哈希表m,把每个pattern中的字母pattern[i]作为序号,s[i]作为其中的值,进行遍历,如果pattern[i]中有值但是不为s[i]说明此时不遵循规律。此外要注意pattern的长度要与s长度相同,
class Solution {
public:
void split(const string& s,vector<string>& sv,const char flag = ' ') {
sv.clear();
istringstream iss(s);
string temp;
while(getline(iss, temp, flag)) {
sv.push_back(temp);
}
return;
}
bool wordPattern(string pattern, string str) {
map<char,string>m;
vector<string>s;
split(str,s);
if(s.size()!=pattern.size()){
return false;
}
set<string>se;
for(int i=0;i<pattern.size();i++){
if(m[pattern[i]]==""){
int len=se.size();
se.insert(s[i]);
if(len==se.size()){
return false;
}
m[pattern[i]]=s[i];
}
else{
if(m[pattern[i]]!=s[i]){
return false;
}
}
}
return true;
}
};