मान लीजिए कि हमारे पास दो तार s और t हैं। हमें यह जांचना है कि s और t के बीच की संपादन दूरी ठीक एक है या नहीं। यहां दो स्ट्रिंग्स के बीच एडिट का मतलब इन तीनों में से कोई भी है -
- एक वर्ण डालें
- एक चरित्र हटाएं
- एक वर्ण बदलें
इसलिए, यदि इनपुट s ="hello" t ="heillo" जैसा है, तो आउटपुट True होगा क्योंकि हमें t प्राप्त करने के लिए s में एक वर्ण डालने की आवश्यकता होती है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- अगर |s का आकार - t का आकार|> 1, फिर
- झूठी वापसी
- edit_dist_cnt:=0, i:=0, j:=0
- जबकि मैं
- यदि s[i] t[j] के समान नहीं है, तो
- यदि edit_dist_cnt 1 के समान है, तो
- झूठी वापसी
- यदि s का आकार> t का आकार, तो
- i :=i + 1
- अन्यथा जब s का आकार
- j :=j + 1
- अन्यथा,
- i :=i + 1, j :=j + 1
- edit_dist_cnt:=edit_dist_cnt + 1
- यदि s[i] t[j] के समान नहीं है, तो
- i :=i + 1, j :=j + 1
उदाहरण
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
def solve(s, t): if abs(len(s) - len(t)) > 1: return false edit_dist_cnt = 0 i = 0 j = 0 while i < len(s) and j < len(t): if s[i] != t[j]: if edit_dist_cnt == 1: return false if len(s) > len(t): i += 1 elif len(s) < len(t): j += 1 else: i += 1 j += 1 edit_dist_cnt +=1 else: i += 1 j += 1 if i < len(s) or j < len(t): edit_dist_cnt += 1 return edit_dist_cnt == 1 s = "hello" t = "heillo" print(solve(s, t))
इनपुट
"hello", "heillo"
आउटपुट
True