详细介绍:【leetcode】290. 单词规律

题目

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
posted @ 2025-08-24 13:22  yjbjingcha  阅读(5)  评论(0)    收藏  举报