跳至主要內容

Leetcode 290. 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

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.

The idea is easy, but need to be aware of edge cases.

class Solution:
    def wordPattern(self, pattern: str, s: str) -> bool:
        check_dict = {}
        reversed_check_dict = {}

        words = s.split(" ")

        if len(words) != len(pattern):
            return False

        for character, word in zip(pattern, words):
            preserved = check_dict.get(character)

            if preserved is None and reversed_check_dict.get(word) is None:
                check_dict[character] = word
                reversed_check_dict[word] = character
            elif preserved != word:
                return False
            
        return True

The other way to use a single hashmap. The trick is finding key in dict or set by leveraging “in” keyword in Python is O(1) complexity. If it’s in a list, like dict.values(), then the time complexity is O(n)

class Solution:
    def wordPattern(self, pattern: str, s: str) -> bool:
        check_dict = {}

        words = s.split(" ")

        if len(words) != len(pattern):
            return False

        for character, word in zip(pattern, words):
            preserved = check_dict.get(character)

            if character not in check_dict and word not in check_dict.values():
                check_dict[character] = word
            elif check_dict.get(character) != word:
                return False
            
        return True
分類:HashmapLeetcode

搶先發佈留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

由 Compete Themes 設計的 Author 佈景主題