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.
解法一:
建立连个hash表,字母和单词对应以后会有相同的映射,这里用位置i+1作为映射值。如果字母或者单词有一个存在hash表中,检查对应映射。如果不同,返回false。最后还要检查输入单词数是否和pattern长度相同。
另外要记住如何将string中的单词以space为间隔分开。
class Solution {
public:
bool wordPattern(string pattern, string str) {
unordered_map<char,int> m1;
unordered_map<string,int> m2;
istringstream in(str);
int i = 0;
for(string word; in>>word; i++){
if (m1.find(pattern[i])!=m1.end() || m2.find(word)!=m2.end()){
if (m1[pattern[i]]!=m2[word]) return false;
}
else
m1[pattern[i]]=m2[word]=i+1;
}
return i==pattern.size();
}
};