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.
这道题是判断字符串与给定模式是否匹配,题目难度为Easy。
题目比较简单,用Hash Table进行匹配就可以了,需要注意的是同一模式不能对应不同字符串,同一字符串也不能对应不同模式,即模式和字符串是一一对应的。用单个Hash Table避免不了上述两种情况,所以这里用两个Hash Table来进行匹配,后一个Hash Table不需要存储对应关系,可以用unordered_set。字符串的处理用stringstream比较方便。具体代码:
class Solution {
public:
bool wordPattern(string pattern, string str) {
int cnt = 0, pos = 0;
string word;
stringstream in(str);
unordered_map<char, string> hash1;
unordered_set<string> hash2;
while(in >> word) {
if(cnt == pattern.size()) return false;
if(hash1.find(pattern[cnt]) == hash1.end() && hash2.find(word) == hash2.end()) {
hash1[pattern[cnt]] = word;
hash2.insert(word);
}
else if(hash1[pattern[cnt]] != word) {
return false;
}
cnt++;
}
return cnt == pattern.size();
}
};