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) {
vector<string> dic;
//分割字符串
istringstream sin(str); //用于执行C++风格的串流的输入操作。
string tmp;
while (sin >> tmp)
dic.push_back(tmp);
if (dic.size() != pattern.size())
return false;
unordered_map<char, string> mp1;
unordered_map<string, char> mp2;
for (int i = 0; i < pattern.size(); ++i) {
//用pattern和str匹配
if (mp1.find(pattern[i]) == mp1.end()) {
mp1[pattern[i]] = dic[i];
} else if (mp1[pattern[i]] != dic[i]) {
return false;
}
//用str和pattern匹配
if (mp2.find(dic[i]) == mp2.end()) {
mp2[dic[i]] = pattern[i];
} else if (mp2[dic[i]] != pattern[i]) {
return false;
}
}
return true;
}
};