leedcode-單詞規律

Junior_bond發表於2024-03-29

自己寫的,好像有點複雜:

class Solution:
    def wordPattern(self, pattern: str, s: str) -> bool:
        # 將字串 s 按空格切分成單詞列表
        mystr = s.split()
        
        # 建立一個空字典,用於儲存字元和其出現位置的對映
        mydic = dict()
        
        # 將單詞列表轉換為集合,以便檢查單詞是否唯一
        mystr_set = set(mystr)
        
        # 檢查模式字串和單詞列表的長度是否相同,如果不同,則返回 False
        if len(mystr) != len(pattern):
            return False
        
        # 遍歷模式字串的每個字元
        for index, char in enumerate(pattern):
            # 如果當前字元不在字典中,將其新增到字典並將其位置作為值
            if char not in mydic:
                mydic.update({char: [index]})
            else:
                # 如果當前字元已經在字典中,將其位置新增到對應字元的值列表中
                mydic[char].append(index)
        
        # 檢查字典中不同值的數量是否與單詞集合的長度相同,如果不同,則返回 False
        if len(mydic) != len(mystr_set):
            return False
        
        # 檢查每個字元在單詞列表中的位置是否一致
        for k, value_list in mydic.items():
            for i in value_list:
                # 如果當前位置的單詞與該字元的第一個位置的單詞不同,則返回 False
                if mystr[i] == mystr[value_list[0]]:
                    continue
                else:
                    return False
        
        # 如果所有檢查都透過,則返回 True
        return True

gpt最佳化:檢查雙向的對映關係

class Solution:
    def wordPattern(self, pattern: str, s: str) -> bool:
        # 將字串 s 按空格切分成單詞列表
        words = s.split()
        
        # 如果單詞數量與模式字元數量不一致,則返回 False
        if len(words) != len(pattern):
            return False
        
        # 建立兩個空字典,用於儲存模式字元到單詞和單詞到模式字元的對映關係
        pattern_to_word = {}
        word_to_pattern = {}
        
        # 遍歷模式字串和單詞列表
        for char, word in zip(pattern, words):
            # 檢查模式字元到單詞的對映關係
            if char not in pattern_to_word:
                pattern_to_word[char] = word
            else:
                # 如果模式字元已經存在於對映中,檢查是否對應相同的單詞,若不同則返回 False
                if pattern_to_word[char] != word:
                    return False
            
            # 檢查單詞到模式字元的對映關係
            if word not in word_to_pattern:
                word_to_pattern[word] = char
            else:
                # 如果單詞已經存在於對映中,檢查是否對應相同的模式字元,若不同則返回 False
                if word_to_pattern[word] != char:
                    return False
        
        # 如果所有對映關係都一致,則返回 True
        return True

相關文章