1. 程式人生 > >【LeetCode 簡單題】73-單詞模式

【LeetCode 簡單題】73-單詞模式

宣告:

今天是第73道題。給定一種 pattern(模式) 和一個字串 str ,判斷 str 是否遵循相同的模式。以下所有程式碼經過樓主驗證都能在LeetCode上執行成功,程式碼也是借鑑別人的,在文末會附上參考的部落格連結,如果侵犯了博主的相關權益,請聯絡我刪除

(手動比心ღ( ´・ᴗ・` ))

正文

題目:給定一種 pattern(模式) 和一個字串 str ,判斷 str 是否遵循相同的模式。這裡的遵循指完全匹配,例如, pattern 裡的每個字母和字串 str

 中的每個非空單詞之間存在著雙向連線的對應模式。

示例1:

輸入: pattern = "abba", str = "dog cat cat dog"

輸出: true

示例 2:

輸入:pattern = "abba", str = "dog cat cat fish"

輸出: false

示例 3:

輸入: pattern = "aaaa", str = "dog cat cat dog"

輸出: false

示例 4:

輸入: pattern = "abba", str = "dog dog dog dog"

輸出: false

說明:

  • 你可以假設 pattern 只包含小寫字母, str 包含了由單個空格分隔的小寫字母。

解法1。首先判斷基線條件,兩者長度是否相等,因為題乾沒有說這一條件。用zip函式相當於把pattern和str每個對應位置上的字元相繫結,然後用set去重,如果str是符合pattern的話,必然滿足程式碼裡的3個set的長度相等。

執行用時: 24 ms, 在Word Pattern的Python提交中擊敗了98.60% 的使用者

class Solution(object):
    def wordPattern(self,pattern,str):
        """
        :type pattern: str
        :type str: str
        :rtype: bool
        """
        str_list = str.split(' ')
        if len(str_list) != len(pattern):    # 注意這裡判斷的是split後的str和pattern的長度
            return False
        return len(set(zip(pattern,str_list))) == len(set(pattern)) == len(set(str_list))

 解法2。感覺其他方法大多是用字典來做,通過儲存pattern和str對應位置上的一一對映關係是否保持不變來判斷,程式碼如下。

執行用時: 28 ms, 在Word Pattern的Python提交中擊敗了54.90% 的使用者

class Solution(object):
    def wordPattern(self, pattern, str):
        """
        :type pattern: str
        :type str: str
        :rtype: bool
        """
        str_list = str.split()
        # 同樣先判斷基線條件
        if len(str_list) != len(pattern):
            return False

        dict = {}    # 存放pattern中字元和str中單詞的對應關係
        for i in range(len(pattern)):
            if pattern[i] not in dict:    # 每遍歷到1個pattern的字母,有2種情況,1是已經在dict中了,2是不在
                if str_list[i] in dict.values():    # 如果pattern中的字母尚未出現在dict中,而對應str的單詞已出現,說明模式不匹配,直接返回False
                    return False
                dict[pattern[i]] = str_list[i]
            else:
                if dict[pattern[i]] != str_list[i]    # 若已存在,但對應的鍵值和str裡的單詞不一樣,表明模式不匹配
        return True

結尾

解法1:https://blog.csdn.net/qq_34364995/article/details/80640440

解法2:LeetCode