问题描述:
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
.
- 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.
利用hashtable,将pattern中的每个字符映射成int,str的每个单词同样也映射成int,两者对比,若有映射不相同的,即视为不匹配。
过程详见代码:
class Solution {
public:
bool wordPattern(string pattern, string str) {
map<char,int> p2i;
map<string,int> w2i;
istringstream in(str);
int i = 0, n = pattern.size();
for(string word; in >> word; i++)
{
if(i == n || p2i[pattern[i]] != w2i[word]) return false;
p2i[pattern[i]] = w2i[word] = i + 1;
}
return i == n;
}
};