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

C++ में दो स्ट्रिंग्स के बीच न्यूनतम एडिट दूरी खोजें


दो शब्द S और T दिए गए हैं, S को T में बदलने के लिए आवश्यक न्यूनतम ऑपरेशंस (इंसर्शन, डिलीशन, रिप्लेसमेंट) की संख्या ज्ञात करें। इसे लीवेंस्टाइन दूरी भी कहते हैं।

उदाहरण: "evaluate" और "fluctuate" → 5 ऑपरेशंस।

समाधान दृष्टिकोण (डायनामिक प्रोग्रामिंग)

  1. आकार (n+1) x (m+1) का DP टेबल बनाएं।
  2. आधार मामले: dp[i][0] = i, dp[0][j] = j।
  3. दोनों स्ट्रिंग्स के आगे एक स्पेस जोड़ें (1-आधारित इंडेक्सिंग)।
  4. i = 1 से n, j = 1 से m तक:
    • यदि s[i] != t[j]: dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])।
    • अन्यथा: dp[i][j] = dp[i-1][j-1]।
  5. dp[n][m] वापस करें।

C++ कार्यान्वयन

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int minDistance(string s, string t) {
        int n = s.size(), m = t.size();
        vector> dp(n + 1, vector(m + 1));
        for (int i = 0; i <= n; i++) dp[i][0] = i;
        for (int j = 0; j <= m; j++) dp[0][j] = j;
        s = " " + s;
        t = " " + t;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (s[i] != t[j])
                    dp[i][j] = 1 + min({dp[i-1][j], dp[i][j-1], dp[i-1][j-1]});
                else
                    dp[i][j] = dp[i-1][j-1];
            }
        }
        return dp[n][m];
    }
};

int main() {
    Solution ob;
    cout << ob.minDistance("fluctuate", "evaluate");
    return 0;
}

इनपुट

"fluctuate" "evaluate"

आउटपुट

5
  1. C++ में रेखा का मध्य बिंदु खोजने का प्रोग्राम C++ में रेखा का मध्य बिंदु खोजने का प्रोग्राम

    इस समस्या में, हमें दो बिंदु A और B दिए गए हैं, एक रेखा के प्रारंभिक और अंतिम बिंदु। हमारा कार्य C++ में रेखा का मध्य बिंदु खोजने के लिए एक प्रोग्राम बनाना है। समस्या विवरण यहां, हमारे पास प्रारंभिक और अंतिम बिंदु A(x1, y1) और B(x2, y2) वाली एक रेखा है। और हमें रेखा का मध्य बिंदु ज्ञात करना है। उद

  1. C++ में त्रिभुज के केंद्रक (Centroid) ज्ञात करने का प्रोग्राम C++ में त्रिभुज के केंद्रक (Centroid) ज्ञात करने का प्रोग्राम

    इस समस्या में, हमें एक 2D ऐरे दिया गया है जो त्रिभुज के तीन शीर्षों के निर्देशांक को दर्शाता है। हमारा कार्य C++ में त्रिभुज के केंद्रक (Centroid) ज्ञात करने का प्रोग्राम बनाना है।केंद्रक (Centroid) त्रिभुज का वह बिंदु है जहां त्रिभुज की तीनों मध्यिकाएं (medians) प्रतिच्छेद करती हैं।मध्यिका (Median)

  1. बाइनरी ट्री के दो नोड्स के बीच की दूरी खोजें C++ में बाइनरी ट्री के दो नोड्स के बीच की दूरी खोजें C++ में

    मान लीजिए हमारे पास कुछ नोड्स के साथ एक बाइनरी ट्री है। हमें दो नोड्स u और v के बीच की दूरी खोजनी है। मान लीजिए ट्री नीचे जैसा है - अब (4, 6) के बीच की दूरी = 4, पथ की लंबाई 4 है, (5, 8) के बीच की लंबाई = 5 आदि। इस समस्या को हल करने के लिए, हम LCA (निम्नतम सामान्य पूर्वज) खोजेंगे, फिर LCA से दो नोड