## [290\. Word Pattern](https://leetcode.com/problems/word-pattern/) Given a `pattern` and a string `s`, find if `s` 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 `s`. **Example 1:** **Input:** pattern = "abba", s = "dog cat cat dog" **Output:** true **Example 2:** **Input:** pattern = "abba", s = "dog cat cat fish" **Output:** false **Example 3:** **Input:** pattern = "aaaa", s = "dog cat cat dog" **Output:** false **Constraints:** - `1 <= pattern.length <= 300` - `pattern` contains only lower-case English letters. - `1 <= s.length <= 3000` - `s` contains only lowercase English letters and spaces `' '`. - `s` **does not contain** any leading or trailing spaces. - All the words in `s` are separated by a **single space**. ```cpp= class Solution { public: bool wordPattern(string pattern, string s) { unordered_map<char, int> m1; unordered_map<string, int> m2; stringstream ss(s); int i = 0; int n = pattern.size(); for (string word; ss >> word; ++i) { // 如果遇到 i == n 的情況,代表 pattern 已經先到終點了 // 但 word 還有單字 if (i == n || m1[pattern[i]] != m2[word]) { return false; } // 更新 index + 1 m1[pattern[i]] = i + 1; m2[word] = i + 1; } // 最後比較 i 有沒有到達終點 return i == n; } }; ``` :::success - 時間複雜度:$O(n + m)$ - 空間複雜度:$O(n)$ :::