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

स्ट्रिंग को पैलिंड्रोम बनाने के लिए न्यूनतम सम्मिलन चरण C++ में

मान लीजिए हमारे पास एक स्ट्रिंग s है, हमें इस स्ट्रिंग को पैलिंड्रोम बनाना है। प्रत्येक चरण में हम किसी भी स्थिति पर कोई भी वर्ण सम्मिलित कर सकते हैं, हमें इस पैलिंड्रोम को बनाने के लिए आवश्यक न्यूनतम वर्णों की संख्या ढूंढनी है। यदि स्ट्रिंग "mad" जैसी है, तो उत्तर 2 होगा क्योंकि हम "da" को "mad" से पहले जोड़ सकते हैं, या "am" को "mad" के बाद जोड़कर इसे पैलिंड्रोम बना सकते हैं।

हल करने का दृष्टिकोण

हम LCS (सबसे लंबी सामान्य उपअनुक्रम) दृष्टिकोण का उपयोग करते हैं:

  • स्ट्रिंग और उसके उल्टे के बीच LCS की लंबाई पैलिंड्रोमिक उपअनुक्रम की लंबाई देती है

  • न्यूनतम सम्मिलन = स्ट्रिंग की लंबाई - LCS लंबाई

  • LCS की गणना के लिए 2D DP का उपयोग करें

उदाहरण

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

class Solution { 
public: 
    int lcs(string s){ 
        string x = s; 
        int n = s.size(); 
        reverse(x.begin(), x.end()); 
        s = " " + s; 
        x = " " + x; 
        vector < vector <int> > dp(n + 1, vector <int>(n + 1)); 
        
        for(int i = 1; i <= n; i++){ 
            for(int j = 1; j <= n; j++){ 
                dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); 
                if(s[i] == x[j]){ 
                    dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 1); 
                } 
            } 
        } 
        return dp[n][n]; 
    } 
    
    int minInsertions(string s) { 
        return s.size() - lcs(s); 
    } 
}; 

int main(){ 
    Solution ob; 
    cout << (ob.minInsertions("mad")); 
    return 0;
}

इनपुट

"mad"

आउटपुट

2
  1. - C++ में स्ट्रिंग को पालिंड्रोम बनाने के लिए आवश्यक न्यूनतम ऐपेंड

    समस्या विवरण एक स्ट्रिंग दी गई है, स्ट्रिंग को पालिंड्रोम बनाने के लिए जोड़े जाने वाले न्यूनतम कैरेक्टर्स ढूंढें। उदाहरण यदि स्ट्रिंग abcac है तो हम 2 हाइलाइट किए गए कैरेक्टर्स जोड़कर स्ट्रिंग को पालिंड्रोम बना सकते हैं यानी abcacba एल्गोरिदम जांचें कि क्या स्ट्रिंग पहले से पालिंड्रोम है, यदि हां त

  1. - C++ में सभी स्ट्रिंग्स को समान बनाने के लिए न्यूनतम मूव-टू-एंड ऑपरेशन्स

    समस्या विवरण n स्ट्रिंग्स दी गई हैं जो एक-दूसरे के क्रमचय हैं। हमें एक ऑपरेशन के साथ सभी स्ट्रिंग्स को समान बनाना है जो किसी भी स्ट्रिंग के पहले कैरेक्टर को उसके अंत में ले जाता है। उदाहरण यदि arr[] = {abcd, cdab} तो 2 मूव्स आवश्यक हैं। पहली स्ट्रिंग abcd लें। कैरेक्टर a को स्ट्रिंग के अंत में ले ज

  1. - C++ में स्ट्रिंग को पालिंड्रोम बनाने के लिए न्यूनतम विलोपन

    समस्या कथन आकार n की एक स्ट्रिंग दी गई है। स्ट्रिंग को पालिंड्रोम बनाने के लिए न्यूनतम वर्णों को हटाने का कार्य है। यदि दी गई स्ट्रिंग abcda है, तो हम पहले और अंतिम को छोड़कर किन्हीं 2 वर्णों को हटा सकते हैं ताकि यह पालिंड्रोम बन जाए। यदि हम b और c हटाते हैं तो ada स्ट्रिंग पालिंड्रोम है यद