Computer >> Máy Tính >  >> Lập trình >> Python

Tìm và thay thế mẫu trong Python

Giả sử chúng ta có một danh sách các từ và một mẫu, và chúng ta phải tìm những từ nào trong các từ phù hợp với mẫu. Ở đây một từ phù hợp với mẫu nếu tồn tại một hoán vị của các chữ cái p để sau khi thay thế mọi chữ cái x trong mẫu bằng p (x), chúng ta nhận được từ đích. Chúng ta phải tìm một danh sách các từ phù hợp với mẫu đã cho.

Vì vậy, ví dụ:nếu đầu vào là ["abc", "deq", "mee", "aqq", "dkd", "ccc"] và mẫu là "abb", thì đầu ra sẽ là ["mee" , “Aqq”], ở đây mee và aqq khớp với kiểu của mẫu “abb”. nhưng “ccc” không phải là một mẫu, vì đây không phải là một hoán vị.

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • xác định một phương thức convert (). Điều này sẽ lấy từ làm đầu vào, điều này sẽ hoạt động như thế -
  • bộ đếm:=1, s:=chuỗi trống
  • s:=s + chuỗi tương đương của bộ đếm
  • cho tôi trong phạm vi từ 1 đến độ dài của từ - 1
    • j:=i - 1
    • while j> =0
      • nếu từ [j] là từ [i] thì ngắt
      • giảm j đi 1
    • nếu j> -1 thì s:=s + s [j], nếu không thì tăng bộ đếm lên 1 và s:=s + giá trị bộ đếm dưới dạng chuỗi
  • trả lại s
  • phương pháp thực tế sẽ như thế nào
  • tạo một mảng word_num và mảng này trống, hãy tạo một mảng trống khác res
  • cho mỗi phần tử i trong các từ -
    • chèn convert (i) vào word_num
  • pattern:=convert (pattern)
  • cho tôi trong phạm vi từ 0 đến độ dài của từ - 1
    • if words_num [i] =pattern, sau đó chèn các từ [i] vào res
  • trả lại res

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

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"))

Đầu vào

["abc","deq","mee","aqq","dkd","ccc"]
"abb"

Đầu ra

['mee', 'aqq']