題目
難度:★★☆☆☆
類型:字符串
給定一種 pattern(模式) 和一個字符串 str ,判斷 str 是否遵循相同的模式。
這里的遵循指完全匹配,例如, pattern 里的每個字母和字符串 str 中的每個非空單詞之間存在著雙向連接的對應(yīng)模式。
說明:
你可以假設(shè) 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
解答
這道題與【題目205. 同構(gòu)字符串】十分相似,我們同樣采用其中的解法,當(dāng)滿足下列條件時,兩者匹配:
模式字符去重后的長度 == 句子中單詞去重后的長度 == 模式-單詞對去重后的長度
這里需要注意的是,輸入的模式長度與句子中單詞個數(shù)存在不相等的情況,這樣一定無法配對。
class Solution(object):
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
str_list = str.split(' ') # 將句子用空格分開組成單詞列表
if len(pattern) == len(str_list): # 如果模式個數(shù)等于單詞個數(shù)
pattern_str_pairs = zip(pattern, str.split(' ')) # 打包組成模式-單詞對
# 只有模式集合長度、單詞集合長度與模式-單詞對集合長度相等時,才能匹配
return len(set(pattern)) == len(set(str_list)) == len(set(pattern_str_pairs))
else: # 如果模式個數(shù)與單詞個數(shù)不同
return False # 一定無法匹配
下面是更加緊湊的寫法,一行代碼實現(xiàn),和以上代碼道理完全相同。
class Solution(object):
def wordPattern(self, pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
return len(set(pattern)) == len(set(str.split(' '))) == len(set(zip(pattern, str.split(' ')))) if len(pattern) == len(str.split(' ')) else False
如有疑問或建議,歡迎評論區(qū)留言~