在 Python 中查找和替换模式

pythonserver side programmingprogramming

假设我们有一个单词列表和一个模式,我们必须找出 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], then break
      • decline j by 1
    • if j > -1,则 s := s + s[j],否则将计数器增加 1 并且 s := s + 计数器值作为字符串
  • 返回 s
  • 实际方法将类似于
  • 创建一个数组 word_num,并且它是空的,再创建一个空数组 res
  • 对于 words 中的每个元素 i −
    • 将 convert(i) 插入 word_num
  • pattern := convert(pattern)
  • 对于 i 在 0 到 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']

相关文章