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.
思路:统一转换成中间的一种模型,进行匹配。
class Solution {
public:
bool wordPattern(string pattern, string str) {
if (pattern.empty() && str.empty())
return true;
map<string, char> mymap;
char* str_char = new char[str.size()];
strcpy(str_char, str.c_str());
char* p = strtok(str_char, " ");
int index = 0;
string str_tmp;
while (p != NULL){
string b(p);
if (mymap.insert(pair<string, char>(b, 'a' + index)).second){
str_tmp += ('a' + index);
index++;
}
else{
str_tmp += mymap[b];
}
p = strtok(NULL, " ");
}
string pattern_tmp = getIsomorphic(pattern);
return !pattern_tmp.compare(str_tmp);
}
string getIsomorphic(string s){
string s_num="";
map<char, char> myMap;
int val = 0;
for (int i = 0; i < s.size(); i++){
char ch = s[i];
if (myMap.insert(pair<char, char>(ch, val+'a')).second){
s_num += (val+'a');
val++;
}
else{
s_num += myMap[ch];
}
}
return s_num;
}
};