假设我们有一个单词列表和一个模式,并且我们必须找到单词中哪些单词与该模式匹配。如果存在字母p的排列,则单词会与模式匹配,因此将模式中的每个字母x替换为p(x)后,我们将获得目标单词。我们必须找到与给定模式匹配的单词列表。
因此,例如,如果输入类似于[“ abc”,“ deq”,“ mee”,“ aqq”,“ dkd”,“ ccc”]],而模式为“ abb”,则输出为[“ mee” ,“ aqq”],这里mee和aqq与模式“ abb”的样式匹配。但是“ ccc”不是模式,因为这不是排列。
为了解决这个问题,我们将遵循以下步骤-
定义一种convert()
方法。这将以单词作为输入,其作用类似于-
计数器:= 1,s:=空字符串
s:= s +计数器的字符串等效
因为我的范围是1到字长– 1
如果单词[j]是单词[i],则中断
将j减1
j:= i – 1
当j> = 0时
如果j> -1,则s:= s + s [j],否则将计数器增加1,并将s:= s +计数器值作为字符串
返回s
实际的方法会像
制作一个数组word_num,这是空的,制作另一个空数组res
对于单词中的每个元素-
将convert(i)插入word_num
模式:= convert(pattern)
对于i,范围从0到字长– 1
如果words_num [i] =模式,则将words [i]插入res
返回资源
让我们看下面的实现以更好地理解-
class Solution(object): def findAndReplacePattern(self, words, pattern): words_num = [] result = [] for i in words: words_num.append(self.convert(i)) pattern = self.convert(pattern) for i in range(len(words)): if words_num[i] == pattern: result.append(words[i]) return result def convert(self,word): counter = 1 s = "" s+=str(counter) for i in range(1,len(word)): j= i -1 while j>=0: if word[j] == word[i]: break j-=1 if j >-1: s+=s[j] else: counter+=1 s+=str(counter) return s ob = Solution()print(ob.findAndReplacePattern(["abc","deq","mee","aqq","dkd","ccc"],"abb"))
["abc","deq","mee","aqq","dkd","ccc"] "abb"
输出结果
['mee', 'aqq']