# LeetCode 290. Word Pattern

## 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).