[Leet Code] Word Pattern

Matthew Boyd
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

--

--