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

सी++ में दूरी संपादित करें


मान लीजिए कि हमारे पास दो शब्द हैं शब्द 1 और शब्द 2, हमें शब्द 1 से शब्द 2 तक संगीत कार्यक्रम के लिए आवश्यक न्यूनतम संक्रियाओं की संख्या ज्ञात करनी है। ऑपरेशन तीन प्रकार के हो सकते हैं, ये हैं एक कैरेक्टर डालें, एक कैरेक्टर को डिलीट करें और एक कैरेक्टर को बदलें। इसलिए यदि इनपुट स्ट्रिंग्स "मूल्यांकन" और "उतार-चढ़ाव" हैं, तो परिणाम 5 होगा।

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

  • n :=w1 का आकार, m :=w2 का आकार,

  • n + 1

    आकार का एक सरणी dp बनाएँ
  • मेरे लिए 0 से n की सीमा में

    • dp[i] :=आकार की नई सरणी m + 1

    • j के लिए 0 से m की सीमा में -

      • डीपी [आई, जे]:=0

      • अगर मैं =0, तो डीपी [i, जे] =जे

      • अन्यथा जब j =0, तब dp[i, j] :=i

  • w1 :=रिक्त स्थान और संयोजन w1, w2 :=रिक्त स्थान और संयोजित w2

  • मैं के लिए 1 से n की सीमा में

    • j के लिए 1 से m की सीमा में

      • अगर w1[i] w2[j] नहीं है, तो dp[i, j] :=1 + min of dp[i-1, j], dp[i, j-1], dp[i-1, j - 1]

      • अन्यथा dp[i, j] :=dp[i – 1, j – 1]

  • वापसी डीपी [एन, एम]

उदाहरण

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

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   int minDistance(string w1, string w2) {
      int n = w1.size();
      int m =w2.size();
      int** dp = new int*[n+1];
      for(int i =0;i<=n;i++){
         dp[i] = new int[m+1];
         for(int j=0;j<=m;j++){
            dp[i][j]=0;
            if(i==0)dp[i][j]=j;
            else if(j==0)dp[i][j] = i;
         }
      }
      w1 = " " + w1;
      w2 = " " + w2;
      for(int i =1;i<=n;i++){
         for(int j = 1;j<=m;j++){
            if(w1[i] !=w2[j]){
               dp[i][j] = 1+min({dp[i-1][j],dp[i][j-1],dp[i1][j-1]});
            } else {
               dp[i][j] = dp[i-1][j-1];
            }
         }
      }
      return dp[n][m];
   }
};
main(){
   Solution ob;
   cout << (ob.minDistance("fluctuate", "evaluate"));
}

इनपुट

"fluctuate"
"evaluate"

आउटपुट

5

  1. C++ में बाइनरी ट्री में सभी नोड्स दूरी K

    मान लीजिए कि हमारे पास एक बाइनरी ट्री, एक लक्ष्य नोड और एक मान K है। हमें उन सभी नोड्स के मानों की एक सूची ढूंढनी है, जिनकी लक्ष्य नोड से दूरी K है। इसलिए, यदि इनपुट रूट =[3,5,1,6,2,0,8, नल, नल, 7,4], लक्ष्य =5, के =2 जैसा है, तो आउटपुट [7,4 होगा ,1], ऐसा इसलिए है क्योंकि लक्ष्य नोड से दूरी 2 वाले

  1. सी++ में लक्ष्य रंग के लिए सबसे छोटी दूरी

    मान लीजिए कि हमारे पास एक सरणी रंग है, जिसमें तीन रंग हैं:1, 2 और 3. हमने कुछ प्रश्न दिए हैं। प्रत्येक क्वेरी में दो पूर्णांक i और c होते हैं, हमें दिए गए अनुक्रमणिका i और लक्ष्य रंग c के बीच सबसे छोटी दूरी ज्ञात करनी होती है। यदि कोई समाधान नहीं है, तो -1 लौटें। तो अगर रंग सरणी [1,1,2,1,3,2,2,3,3]

  1. सी ++ में ओवरलोड यूनरी माइनस ऑपरेटर?

    ऑपरेटर कीवर्ड एक फ़ंक्शन घोषित करता है जो निर्दिष्ट करता है कि किसी वर्ग के उदाहरणों पर लागू होने पर ऑपरेटर-प्रतीक का क्या अर्थ है। यह ऑपरेटर को एक से अधिक अर्थ देता है, या इसे अधिभार देता है। कंपाइलर एक ऑपरेटर के विभिन्न अर्थों के बीच उसके ऑपरेंड के प्रकारों की जांच करके अंतर करता है। यूनरी ऑपरेटर