此题较简单,只需要将每个词取出来,然后和pattern进行对比即可。同时采用两个mapping结构,来保证一一映射的关系。但是此题我花费了较长的时间来解决,主要是因为单词拼错了!!!!!f**k.(还是c++好呀,单词拼错没定义的话肯定会报错的。。。。) 看了别人的解法,虽然很精简,但是还是O(n2)的算法,就没细看。
class Solution:
def findAndReplacePattern(self, words, pattern):
"""
:type words: List[str]
:type pattern: str
:rtype: List[str]
"""
result = []
for i in range(len(words)):
if len(pattern) == len(words[i]):
mapping = {}
tst = {}
signal = True
for j in range(len(pattern)):
value = pattern[j]
if mapping.get(value) == None:
mapping[value] = words[i][j]
elif mapping.get(value) != words[i][j]:
signal = False
break
if tst.get(words[i][j]) == None:
tst[words[i][j]] = value
elif tst.get(words[i][j]) != value:
signal = False
break
if signal:
result.append(words[i])
return result