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.
Related Topics:
Hash Table
Similar Questions:
// OJ: https://leetcode.com/problems/word-pattern/
// Author: github.com/lzl124631x
// Time: O(M + N)
// Space: O(M + N)
class Solution {
public:
bool wordPattern(string pattern, string str) {
unordered_map<char, string> m;
unordered_map<string, char> r;
istringstream ss(str);
string word;
for (char c : pattern) {
if (!(ss >> word)) return false;
if ((m.count(c) && m[c] != word)
|| r.count(word) && r[word] != c) return false;
m[c] = word;
r[word] = c;
}
return ss.eof();
}
};