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;
}
};