290. Word Pattern
Difficulty: Easy
Topics: Hash Table
Similar Questions:
Problem:
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
.
Example 1:
Input: pattern ="abba"
, str ="dog cat cat dog"
Output: true
Example 2:
Input:pattern ="abba"
, str ="dog cat cat fish"
Output: false
Example 3:
Input: pattern ="aaaa"
, str ="dog cat cat dog"
Output: false
Example 4:
Input: pattern ="abba"
, str ="dog dog dog dog"
Output: false
Notes:
You may assume pattern
contains only lowercase letters, and str
contains lowercase letters that may be separated by a single space.
Solutions:
class Solution {
public:
bool wordPattern(string pattern, string str) {
unordered_map<char, string> patternToString;
unordered_map<string, char> stringToPattern;
int pos = 0;
for (int i = 0; i < pattern.length(); ++i) {
char c = pattern[i];
string sub;
while (pos < str.length() && str[pos] != ' ') {
sub.push_back(str[pos]);
++pos;
}
if (patternToString.count(c) == 0 && stringToPattern.count(sub) == 0) {
patternToString[c] = sub;
stringToPattern[sub] = c;
} else {
if (sub != patternToString[c] || c != stringToPattern[sub]) return false;
}
if (pos == str.length()) {
return i == pattern.length() - 1;
}
++pos;
}
return false;
}
};