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
.
Input: pattern = "abba", s = "dog cat cat dog"
Output: true
Input: pattern = "abba", s = "dog cat cat fish"
Output: false
Input: pattern = "aaaa", s = "dog cat cat dog"
Output: false
1 <= pattern.length <= 300
1 <= s.length <= 3000
s
contains only lowercase English letters and spaces ' '
.s
does not contain any leading or trailing spaces.s
are separated by a single space.class Solution:
def wordPattern(self, pattern: str, s: str) -> bool:
if len(set(pattern))!=len(set(s.split())):
return False
_dict=defaultdict(str)
for s1, s2 in zip(pattern, s.split()):
_dict[s1]=s2
if [_dict[x] for x in pattern]==s.split():
return True
return False
words, w_to_p = s.split(' '), dict()
if len(p) != len(words): return False
if len(set(p)) != len(set(words)): return False # for the case w = ['dog', 'cat'] and p = 'aa'
for i in range(len(words)):
if words[i] not in w_to_p:
w_to_p[words[i]] = p[i]
elif w_to_p[words[i]] != p[i]:
return False
return True
References