반응형
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. Specifically:
- Each letter in
patternmaps to exactly one unique word ins. - Each unique word in
smaps to exactly one letter inpattern. - No two letters map to the same word, and no two words map to the same letter.
Example 1:
Input: pattern = "abba", s = "dog cat cat dog"
Output: true
Explanation:
The bijection can be established as:
'a'maps to"dog".'b'maps to"cat".
Example 2:
Input: pattern = "abba", s = "dog cat cat fish"
Output: false
Example 3:
Input: pattern = "aaaa", s = "dog cat cat dog"
Output: false
Constraints:
1 <= pattern.length <= 300patterncontains only lower-case English letters.1 <= s.length <= 3000scontains only lowercase English letters and spaces' '.sdoes not contain any leading or trailing spaces.- All the words in
sare separated by a single space.
class Solution:
def wordPattern(self, pattern: str, s: str) -> bool:
c2word = {}
word2c = {}
s = s.split()
if len(pattern) != len(s) :
return False
for i in range(len(pattern)) :
char = pattern[i]
if char not in c2word :
c2word[char] = s[i]
else :
if c2word[char] == s[i] :
continue
else :
return False
for i in range(len(s)) :
word = s[i]
if word not in word2c :
word2c[word] = pattern[i]
else :
if word2c[word] == pattern[i] :
continue
else :
return False
return True
처음에는 어렵게 느껴졌었는데 몇번 풀다 보니 괜찮아진 문제이다.
처음에는 딕셔너리를 하나만 써서 풀려고 했으나, 생각처럼 쉽지 않았다. 해결 방법은 간단했다. 딕셔너리를 두 개 쓰면 된다.
반응형
'알고리즘 스터디' 카테고리의 다른 글
| [Leetcode/파이썬] 130. Surrounded Regions (0) | 2025.10.31 |
|---|---|
| [Leetcode/파이썬] 61. Rotate List (0) | 2025.10.30 |
| [Leetcode/파이썬] 129. Sum Root to Leaf Numbers (0) | 2025.10.26 |
| [Leetcode/파이썬] 48. Rotate Image (0) | 2025.10.25 |
| [Leetcode/파이썬] 20. Valid Parentheses (0) | 2025.10.19 |