法とパターン文字列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