290. 單詞模式(Python)

題目

難度:★★☆☆☆
類型:字符串

給定一種 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ū)留言~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容