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. Specifically:
- Each letter in
patternmaps to exactly one unique word ins. - Each unique word in
smaps to exactly one letter inpattern. - No two letters map to the same word, and no two words map to the same letter.
Example 1:
Input: pattern = "abba", s = "dog cat cat dog"
Output: true
Explanation:
'a'maps to"dog".'b'maps to"cat".
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 <= 300patterncontains only lower-case English letters.1 <= s.length <= 3000scontains only lowercase English letters and spaces' '.sdoes not contain any leading or trailing spaces.- All the words in
sare separated by a single space.
使用した概念Hash Table
アプローチ
思考
- 単語と文字を紐づける。
patternを走査して、既存の文字列に合致しているか確認する。
実装
class Solution:
def wordPattern(self, pattern: str, s: str) -> bool:
s_list = s.split(" ")
map_ps = {}
for p, c in zip(pattern, s_list):
if p in map_ps and map_ps[p] != c:
return False
map_ps[p] = c
return TrueTime Space
注意点
zipが短い方に合わせて終了するため、要素数が異なる場合を正しく評価できない。- 双方向のマッピングを検証する必要がある。