【LeetCode 簡單題】73-單詞模式
阿新 • • 發佈:2018-11-07
宣告:
今天是第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