[Leet Code] Word Pattern
2 min readSep 1, 2021
Leet Code: https://leetcode.com/problems/word-pattern/
Problem:
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
Example 4:
Input: pattern = "abba", s = "dog dog dog dog"
Output: false
Constraints:
1 <= pattern.length <= 300
pattern
contains only lower-case English letters.1 <= s.length <= 3000
s
contains only lower-case English letters and spaces' '
.s
does not contain any leading or trailing spaces.- All the words in
s
are separated by a single space.
Solution:
class Solution(object):
def wordPattern(self, pattern, s):
"""
:type pattern: str
:type s: str
:rtype: bool
"""
s_list = []
pattern_list = []
s_current = ""
pattern_current = ""
s_count = 0
pattern_count = 0
previous_answers_s = {}
previous_answers_pattern = {}
for i in s.split(" "):
if i not in previous_answers_s:
s_count += 1
previous_answers_s[i] = s_count
s_list.append(s_count)
s_current = i
else:
s_list.append(previous_answers_s[i])
for i in pattern:
if i not in previous_answers_pattern:
pattern_count += 1
previous_answers_pattern[i] = pattern_count
pattern_list.append(pattern_count)
pattern_current = i
else:
pattern_list.append(previous_answers_pattern[i])
if str(pattern_list) == str(s_list):
return True
else:
return False