मान लीजिए हमारे पास शब्दों की एक सूची और एक पैटर्न है, और हमें यह ढूंढना है कि words में कौन से शब्द पैटर्न से मेल खाते हैं। यहां एक शब्द पैटर्न से मेल खाता है यदि अक्षरों का एक क्रमपरिवर्तन p मौजूद है ताकि पैटर्न में प्रत्येक अक्षर x को p(x) से बदलने के बाद, हमें लक्ष्य शब्द मिले। हमें words में उन शब्दों की सूची ढूंढनी है जो दिए गए पैटर्न से मेल खाते हैं।
इसलिए उदाहरण के लिए, यदि इनपुट ["abc","deq","mee","aqq","dkd","ccc"] जैसा है और पैटर्न "abb" है, तो आउटपुट ["mee", "aqq"] होगा, यहां mee और aqq पैटर्न "abb" की शैली से मेल खा रहे हैं। लेकिन "ccc" एक पैटर्न नहीं है, क्योंकि यह एक क्रमपरिवर्तन नहीं है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- एक convert() मेथड परिभाषित करें। यह इनपुट के रूप में शब्द लेगा, यह इस तरह कार्य करेगा -
- counter := 1, s := खाली स्ट्रिंग
- s := s + counter का स्ट्रिंग समकक्ष
- i के लिए 1 से शब्द की लंबाई - 1 तक की रेंज में
- j := i - 1
- जबकि j >= 0
- यदि word[j] word[i] है, तो ब्रेक करें
- 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)
- 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']