def wordPattern(pattern, str):
"""
:type pattern: str
:type str: str
:rtype: bool
"""
list_pattern = list()
list_str = list()
for letter in pattern:
list_pattern.append(letter)
for word in str.split():
list_str.append(word)
new_dict = {}
c = 0
for letter in list_pattern:
if letter not in new_dict:
new_dict[letter] = ''
if list_str[c] not in new_dict[letter]:
new_dict[letter] = list_str[c]
c = c + 1
for key in new_dict:
if len(new_dict[key]) != 1:
print (len(new_dict[key]))
print (new_dict[key])
print ('false')
print ('true')
print(new_dict)
wordPattern("abba","dog cat cat dog")
问题我试图解决的问题是: 给定一个模式和一个字符串str,找到str是否遵循相同的模式。
以下是完全匹配,以便在格式中的字母与str中的非空字之间存在双射。
示例:
pattern =" abba",str =" dog cat cat dog"应该回归真实。
pattern =" abba",str =" dog cat cat fish"应该返回false。
pattern =" aaaa",str =" dog cat cat dog"应该返回false。
pattern =" abba",str ="狗狗狗狗"应该返回false。
注意:
您可以假设模式仅包含小写字母,而str包含由单个空格分隔的小写字母。
结果:
3
dog
false
3
cat
false
true
{'a': 'dog', 'b': 'cat'}
我无法理解为什么我得到3作为Len(list_name [key_name]),而它明显是1?请注意,我理解可能有更好的方式等,但我开始学习,我想了解我的错误。
答案 0 :(得分:0)
您的逻辑可以简化为几行:
def wordPattern(pattern, mystr):
d = dict(zip(pattern, mystr.split()))
return mystr.split() == list(map(d.get, pattern))
wordPattern("abba","dog cat cat dog") # True
<强>解释强>
zip
将字母映射到字词。<强>更新强>
您可以通过if
声明轻松处理边缘情况:
def wordPattern(pattern, mystr):
d = dict(zip(pattern, mystr.split()))
if sorted(d.values()) != sorted(set(d.values())):
return False
return mystr.split() == list(map(d.get, pattern))
wordPattern("abba","dog dog dog dog") # False