Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

C++ में वन एडिट डिस्टेंस


मान लीजिए हमारे पास दो स्ट्रिंग्स s और t हैं; हमें जांचना है कि क्या वे दोनों वन एडिट डिस्टेंस पर हैं। वन एडिट डिस्टेंस के तीन प्रकार हैं:

  • s में एक कैरेक्टर डालकर t प्राप्त करना

  • s से एक कैरेक्टर हटाकर t प्राप्त करना

  • s के एक कैरेक्टर को बदलकर t प्राप्त करना

इसलिए, यदि इनपुट है s = "ab", t = "acb", तो आउटपुट True होगा।

इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:

  • n := s का आकार, m := t का आकार

  • यदि n < m, तो -

    • isOneEditDistance(t, s) लौटाएं

  • i := 0 से शुरू करें, जब i < m, i बढ़ाते हुए, करें -

    • यदि s[i], t[i] के बराबर नहीं है, तो -

      • यदि n, m के समान है, तो -

        • true लौटाएं जब s का सबस्ट्रिंग इंडेक्स 0 से (i) तक, t के सबस्ट्रिंग इंडेक्स 0 से (i) तक के समान हो

      • true लौटाएं जब s का सबस्ट्रिंग इंडेक्स 0 से (i) तक, t के सबस्ट्रिंग इंडेक्स 0 से (i - 1) तक के समान हो

  • true लौटाएं जब m + 1, n के समान हो

उदाहरण

बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

#include <bits/stdc++.h> using namespace std; class Solution { public:    bool isOneEditDistance(string s, string t) {       int n = s.size();       int m = t.size();       if (n < m) {          return isOneEditDistance(t, s);       }       for (int i = 0; i < m; i++) {          if (s[i] != t[i]) {             if (n == m) {                return s.substr(i + 1) == t.substr(i + 1);             }             return s.substr(i + 1) == t.substr(i);          }       }       return m + 1 == n;    } }; main(){    Solution ob;    cout << (ob.isOneEditDistance("ab", "acb")); }

इनपुट

s = "ab", t = "acb"

आउटपुट

1

  1. - C++ में सबसे छोटा शब्द दूरी III

    मान लीजिए हमारे पास शब्दों की एक सूची है और दो अन्य शब्द word1 और word2 हैं, हमें सूची में इन दो शब्दों के बीच की सबसे छोटी दूरी ढूंढनी है। यहाँ word1 और word2 समान हो सकते हैं और वे सूची में दो अलग-अलग शब्दों को दर्शाते हैं। मान लीजिए words = [practice, makes, perfect, skill, makes]।इसलिए, यदि इनपु

  1. - C++ में सबसे छोटा शब्द दूरी II

    मान लीजिए एक क्लास है जो कंस्ट्रक्टर में शब्दों की सूची प्राप्त करती है, इसमें एक मेथड होगा जो दो शब्द word1 और word2 लेगा और सूची में इन दो शब्दों के बीच की सबसे छोटी दूरी ढूंढेगा। वह मेथड अलग-अलग पैरामीटर्स के साथ बार-बार कई बार कॉल किया जाएगा।मान लीजिए words = [practice, makes, perfect, skill, ma

  1. C++ में ट्री में एक पंक्ति जोड़ें C++ में ट्री में एक पंक्ति जोड़ें

    मान लीजिए हमारे पास एक बाइनरी ट्री है, हमारे पास मान v और गहराई d भी है, हमें दिए गए गहराई d पर मान v वाले नोड्स की एक पंक्ति जोड़नी है। रूट नोड गहराई 1 पर है। हमें इस ऑपरेशन को करने के लिए निम्न नियम का पालन करना होगा: चूंकि हमें गहराई d पता है, गहराई d-1 पर प्रत्येक वैध ट्री नोड N के लिए, हमें मा