本题题目要求如下:
Given a pattern
and a string str
,
find if str
follows the same pattern.
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:
pattern
contains only lowercase alphabetical letters, andstr
contains words separated by a single space. Each word instr
contains only lowercase alphabetical letters.- Both
pattern
andstr
do not have leading or trailing spaces. - Each letter in
pattern
must map to a word with length that is at least 1.
代码如下:
class Solution {
public:
bool wordPattern(string pattern, string str) {
istringstream is(str);
unordered_map<char, string> hashmap;
unordered_set<string> hashset;
string word;
int sz = pattern.length();
int i = 0;
while (is >> word) {
hashset.insert(word);
if (i == sz) {
return false;
}
char tmp_val = pattern[i++];
auto found = hashmap.find(tmp_val);
if (found == hashmap.end()) {
hashmap[tmp_val] = word;
}
else {
if (hashmap[tmp_val] != word) {
return false;
}
}
}
return (hashset.size() == hashmap.size() and i == sz);
}
};