Given a pattern
and a string str
, find if str
follows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in pattern
and a non-empty word in str
.
Examples:
- pattern =
"abba"
, str ="dog cat cat dog"
should return true. - pattern =
"abba"
, str ="dog cat cat fish"
should return false. - pattern =
"aaaa"
, str ="dog cat cat dog"
should return false. - pattern =
"abba"
, str ="dog dog dog dog"
should return false.
Notes:
You may assume pattern
contains only lowercase letters, and str
contains lowercase letters separated by a single space.
Credits:
Special thanks to @minglotus6 for adding this problem and creating all test cases.
该题目思路和205题Isomorphic Strings 几乎完全一样,只不过变成了字符和string的映射罢了。
class Solution {
public:
bool wordPattern(string pattern, string str) {
map<char,string>mp1;
map<string,char>mp2;
vector<string> vec;
int len=str.size();//求字符串的长度这种函数最好还是放在FOR循环的外面,不然每次循环都要求一次长度,可能会导致超时
for(int i=0,j=0;i<len;i++){
if(str[i]==' '){
vec.push_back(str.substr(j,i-j));
j=i+1;
}
else if(i==len-1){
vec.push_back(str.substr(j,i-j+1));
}
}
if(pattern.size()!=vec.size())return false;
for(int i=0;i<vec.size();i++){
if(mp1.find(pattern[i])==mp1.end()&&mp2.find(vec[i])==mp2.end()){
mp1[pattern[i]]=vec[i];
mp2[vec[i]]=pattern[i];
}
else if(mp1[pattern[i]]!=vec[i]||mp2[vec[i]]!=pattern[i])
return false;
}
return true;
}
};