详细介绍:【leetcode】290. 单词规律
题目
给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = “abba”, s = “dog cat cat dog”
输出: true
示例 2:
输入:pattern = “abba”, s = “dog cat cat fish”
输出: false
示例 3:
输入: pattern = “aaaa”, s = “dog cat cat dog”
输出: false
题解
1. 哈希表 + 判断value
class Solution
(object):
def wordPattern(self, pattern, s):
"""
:type pattern: str
:type s: str
:rtype: bool
"""
p2s = dict()
s_list = s.strip(" ").split(" ")
if len(pattern) != len(s_list):
return False
for i in range(len(pattern)):
if pattern[i] not in p2s:
p2s[pattern[i]] = s_list[i]
else:
if p2s[pattern[i]] != s_list[i]:
return False
count_value = {
}
for key, value in p2s.items():
if value not in count_value:
count_value[value] = 1
else:
count_value[value] += 1
for value in count_value.values():
if value >
1:
return False
# s2t = {v: k for k, v in p2s.items()}
# count_key = {}
# for key in p2s.keys():
# if key not in count_key:
# count_key[key] = 1
# else:
# count_key[key] += 1
# for value in count_key.values():
# if value > 1:
# return False
return True
2. 哈希表 + zip
class Solution
(object):
def wordPattern(self, pattern, s):
"""
:type pattern: str
:type s: str
:rtype: bool
"""
word2ch = dict()
ch2word = dict()
words = s.split()
if len(pattern) != len(words):
return False
for ch, word in zip(pattern, words):
if (word in word2ch and word2ch[word] != ch) or (ch in ch2word and ch2word[ch] != word):
return False
word2ch[word] = ch
ch2word[ch] = word
return True
浙公网安备 33010602011771号