Description
https://leetcode.com/problems/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
.
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.
Explanation
Group pattern and string words by their components and record the occurrence positions. Check if the positions are the same.
Python Solution
class Solution:
def wordPattern(self, pattern: str, s: str) -> bool:
pattern_groups = defaultdict(list)
for i, c in enumerate(pattern):
pattern_groups[c].append(i)
word_groups = defaultdict(list)
words = s.split()
for i, word in enumerate(words):
word_groups[word].append(i)
return list(pattern_groups.values()) == list(word_groups.values())
- Time Complexity: O(N).
- Space Complexity: O(N).