본문 바로가기

알고리즘 스터디

[Leetcode/파이썬] 290. Word Pattern

반응형

Word Pattern

Difficulty: Easy


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 pattern maps to exactly one unique word in s.
  • Each unique word in s maps to exactly one letter in pattern.
  • 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 <= 300
  • pattern contains only lower-case English letters.
  • 1 <= s.length <= 3000
  • s contains only lowercase English letters and spaces ' '.
  • s does not contain any leading or trailing spaces.
  • All the words in s are 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

처음에는 어렵게 느껴졌었는데 몇번 풀다 보니 괜찮아진 문제이다. 

처음에는 딕셔너리를 하나만 써서 풀려고 했으나, 생각처럼 쉽지 않았다. 해결 방법은 간단했다. 딕셔너리를 두 개 쓰면 된다. 

반응형