290. Word Pattern

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.

bool wordPattern(string pattern, string str) { // time: O(n); space: O(n)
    unordered_map<char, string> char2str;
    unordered_set<string> strSt;
    istringstream is(str);
    string cur;
    int i = 0, n = pattern.size();
    while (i < n && is >> cur) {
        if ((char2str.count(pattern[i]) && char2str[pattern[i]] != cur) ||
            !char2str.count(pattern[i]) && strSt.count(cur)) 
            return false;
        else {
            char2str[pattern[i]] = cur;
            strSt.insert(cur);
        }
        ++i;
    }
    return i == n && !(is >> cur);
}

Last updated

Was this helpful?