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.
跟205. Isomorphic Strings(重要)类似
class Solution {
public:
bool wordPattern(string pattern, string str) {
int lenP = pattern.size();
vector<string> vec;
stringstream ss(str);
string s;
while (ss >> s){
vec.push_back(s);
}
int lenStr = vec.size();
if (lenP != lenStr){
return false;
}
unordered_map<string, string> hash, reflect;
for (int i = 0; i < lenP; i++){
if (!hash.count(to_string(pattern[i])) && !reflect.count(vec[i])){
hash[to_string(pattern[i])] = vec[i];
reflect[vec[i]] = to_string(pattern[i]);
}
else{
if (hash[to_string(pattern[i])] != vec[i]){
return false;
}
}
}
return true;
}
};