Pythonのアルゴリズム日記(文字列シリーズ)_leetcode 290ワードの法則

法とパターン文字列strを考えると、strが同じルールに従うかどうかを決定します。

ここでは、例えば、各文字列strと各非空のワードとの間の双方向接続に対応するパターンの規則性があり、完全一致手段に従います。

例1:

入力:パターン=「アバ」、STR =「犬猫猫犬」
出力:真の
例2:

入力:パターン=「アバ」、STR =「犬猫猫の魚」
出力:偽
例3:

入力:パターン=「AAAA」、STR =「犬猫猫犬」
出力:偽
例4:

入力:パターン=「アバ」、STR =「犬犬犬犬」
出力:偽

出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/word-pattern

ハッシュ・テーブル・マッピングを確立

class Solution:
    def wordPattern(self, pattern: str, str: str) -> bool:
        word_list = str.split()
        if len(set(pattern))!= len(set(word_list)): #避免"abba","dog dog dog dog"
            return False
        if len(pattern)!=len(word_list): #长度不等,模式不同
            return False
        str_map = {}
        for i,val in enumerate(pattern):
            if val not in str_map.keys():
                str_map[val]=word_list[i]  #建立字母与单词的映射
            if str_map[val]==word_list[i]:
                    continue
            else:
                    return False
        return True

ミャオ族Xiaowei @から2行のコードのLeetCodeコメント  https://leetcode-cn.com/u/mou-xiao-wei/

元のマップにも、これを使用することができます。

class Solution:
    def wordPattern(self, pattern: str, str: str) -> bool:
        res=str.split()
        return list(map(pattern.index, pattern))==list(map(res.index,res))
        # pattern.index('a')返回pattern字符串中字符‘a’首次出现的位置

2つの2比較パターンと単語は、同時に等しい又は等しくありません。

class Solution:
    def wordPattern(self, pattern: str, str: str) -> bool:
        word_list = str.split()
        if len(set(pattern))!= len(set(word_list)):
            return False
        if len(pattern)!=len(word_list):
            return False
        for i in range(len(pattern)-1):
            if pattern[i]==pattern[i+1] and word_list[i]!=word_list[i+1]:
                return False
            elif pattern[i]!=pattern[i+1] and word_list[i]==word_list[i+1]:
                return False
        return True

 

公開された44元の記事 ウォンの賞賛0 ビュー1900

おすすめ

転載: blog.csdn.net/weixin_39331401/article/details/104660477