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']

更新於:2020年4月30日

142 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告