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) {
map<string, int> map_p;
map<string, int> map_s;
istringstream in(str);
int i = 0;
for (string word_s; pattern.size() && in >> word_s ; ++i) {
const string word_p(1, pattern[i]);
if (map_s[word_s] != map_p[word_p])
return false;
map_p[word_p] = map_s[word_s] = i + 1;
}
return i == pattern.size() && in.eof();
}
};