Python 中的查找和替换模式
假设我们有一组单词和一个模式,我们需要找到 words 中哪些单词与该模式匹配。如果存在字母排列 p,使得用 p(x) 替换模式中的每个字母 x 后得到目标单词,则该单词与模式匹配。我们必须找到 words 中与给定模式匹配的单词列表。
例如,如果输入是 ["abc","deq","mee","aqq","dkd","ccc"] 且模式是“abb”,则输出将是 ["mee", "aqq"],这里 mee 和 aqq 与模式“abb”的样式匹配。“ccc”不是模式,因为它不是排列。
为了解决这个问题,我们将遵循以下步骤:
- 定义一个 convert() 方法。它将单词作为输入,其作用如下:
- counter := 1, s := 空字符串
- s := s + counter 的字符串等价物
- for i in range 1 to length of word – 1
- j := i – 1
- while j>=0
- if word[j] is word[i],则 break
- j 减 1
- 如果 j > -1,则 s := s + s[j],否则 counter 加 1 且 s := s + counter 值作为字符串
- 返回 s
- 实际方法如下:
- 创建一个数组 word_num,它是空的,再创建一个空数组 res
- 对于 words 中的每个元素 i:
- 将 convert(i) 插入 word_num
- pattern := convert(pattern)
- for i in range 0 to length of words – 1
- 如果 words_num[i] = pattern,则将 words[i] 插入 res
- 返回 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']
广告