↓快轉到主要內容
  1. LeetCode/

LeetCode 290: Word Pattern

·1 分鐘· ·
LeetCode Easy Hash-Table String
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-23

  • 提交紀錄:Accepted(一次通過)

解題思路
#

跟 LC 205 一樣是雙射:每個字元只對應一個單字,每個單字也只對應一個字元。長度要相同,而且 pattern 字元種類數、單字種類數、(字元, 單字) 配對種類數三者相等(Hash Table 模板五)。

我的嘗試
#

一次 AC,當時的寫法是分別記錄每個字元、每個單字出現的位置 list,再比較兩邊的位置集合是否相同。

正確解法
#

class Solution:
    def wordPattern(self, pattern: str, s: str) -> bool:
        words = s.split()
        if len(pattern) != len(words):
            return False
        return len(set(pattern)) == len(set(words)) == len(set(zip(pattern, words)))

複雜度
#

時間 O(n + m),空間 O(n + m)。

要特別避免的錯誤
#

  • 長度不同要先排除,zip 會默默截斷。
  • 兩個方向都要一對一:"ab" 對 "dog dog" 不成立。

面試口說整理
#

這是雙射,我先確認長度一樣,再比較字元種類數、單字種類數和配對種類數三者相等。時間 O(n + m)。

相關文章

LeetCode 383: Ransom Note
·1 分鐘
LeetCode Easy Hash-Table String Counting
LeetCode 383 解題筆記:ransomNote 每個字元的需求數量都不能超過 magazine 的數量;Counter 相減為空就成立
LeetCode 387: First Unique Character in a String
·1 分鐘
LeetCode Easy Hash-Table String Queue Counting
LeetCode 387 解題筆記:先計數,再從左到右找第一個次數是 1 的字元
LeetCode 389: Find the Difference
·1 分鐘
LeetCode Easy Hash-Table String Bit-Manipulation Sorting
LeetCode 389 解題筆記:t 比 s 多一個字元,把兩個字串的所有字元 XOR 起來,成對的抵消,剩下的就是多的那個
LeetCode 409: Longest Palindrome
·1 分鐘
LeetCode Easy Hash-Table String Greedy
LeetCode 409 解題筆記:每個字元取偶數個放兩邊,只要有任何奇數次的字元,中間還能再放一個
LeetCode 242: Valid Anagram
·1 分鐘
LeetCode Easy Hash-Table String Sorting
LeetCode 242 解題筆記:兩個字串的字元次數完全相同就是 anagram,用 Counter 比較或排序後比較
LeetCode 205: Isomorphic Strings
·1 分鐘
LeetCode Easy Hash-Table String
LeetCode 205 解題筆記:兩個字串的字元要一對一對應,字元種類數和配對種類數都相同就成立