290. Word Pattern

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

results matching ""

    No results matching ""