Use a set and a map to track words.
class Solution:
def wordPattern(self, pattern: str, s: str) -> bool:
words = s.split(" ")
if len(pattern) != len(words):
return False
m = {}
st = set()
for i, p in enumerate(pattern):
if p not in m:
if words[i] in st:
return False
m[p] = words[i]
st.add(words[i])
else:
if words[i] != m[p]:
return False
return True