290. Word Pattern (Easy)
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.
Solution: Hash Table
class Solution {
public:
bool wordPattern(string pattern, string str) {
istringstream is(str);
string chunk; int i = 0;
unordered_set<string> used;
unordered_map<char, string> m;
while (getline(is, chunk, ' ')) {
if (!m.count(pattern[i])) {
if (used.count(chunk)) return false;
used.insert(chunk);
m[pattern[i]] = chunk;
} else if (m[pattern[i]] != chunk) return false;
++i;
}
return i == pattern.size();
}
};