给定一个模式字符串 pattern 和一个普通字符串 s,判断字符串 s 是否遵循相同的规律。这里的"遵循"指pattern中的每个字符和字符串s中的每个非空单词之间存在着双向的一一对应关系。
使用两个哈希表分别存储:
def wordPattern(pattern: str, s: str) -> bool:
# 将字符串分割成单词列表
words = s.split()
# 检查长度是否匹配
if len(pattern) != len(words):
return False
# 创建两个字典存储映射关系
char_to_word = {} # 字符到单词的映射
word_to_char = {} # 单词到字符的映射
# 同时遍历pattern和words
for char, word in zip(pattern, words):
# 检查字符到单词的映射
if char in char_to_word:
if char_to_word[char] != word:
return False
else:
char_to_word[char] = word
# 检查单词到字符的映射
if word in word_to_char:
if word_to_char[word] != char:
return False
else:
word_to_char[word] = char
return True以示例 pattern = "abba", s = "dog cat cat dog" 为例:
首先分割字符串:
建立映射关系:
最终的映射关系:
这是一道考察哈希表应用的经典题目,关键在于:
解决这类问题的通用思路是: