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

C++ में पैलिंड्रोम रिमूवल

मान लीजिए हमारे पास arr नामक एक पूर्णांक ऐरे है, अब एक चाल में हम इंडेक्स i से j तक एक पैलिंड्रोमिक सबऐरे चुन सकते हैं जहां i <= j, और उस सबऐरे को दिए गए ऐरे से हटा सकते हैं। हमें ध्यान रखना होगा कि सबऐरे को हटाने के बाद, उस सबऐरे के बाएं और दाएं के एलिमेंट्स हटाने से बने गैप को भरने के लिए मूव करेंगे। हमें ऐरे से सभी नंबरों को हटाने के लिए आवश्यक न्यूनतम चालों की संख्या ज्ञात करनी है।

तो, यदि इनपुट arr = [1,3,4,1,5] है, तो आउटपुट 3 होगा, क्योंकि हम इस क्रम में हटा सकते हैं: [4] हटाएं फिर [1,3,1] हटाएं फिर [5] हटाएं।

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

  • n := arr का आकार

  • आकार (n + 1) x (n + 1) का एक 2D ऐरे dp परिभाषित करें

  • l := 1 से शुरू करें, जब l <= n, अपडेट करें (l को 1 से बढ़ाएं), करें:

    • i := 0, j := l - 1 से शुरू करें, जब j < n, अपडेट करें (i को 1 से बढ़ाएं), (j को 1 से बढ़ाएं), करें:

      • यदि l 1 के समान है, तो:

        • dp[i, j] := 1

      • अन्यथा:

        • dp[i, j] := 1 + dp[i + 1, j]

        • यदि i + 1 < n और arr[i], arr[i + 1] के समान है, तो:

          • dp[i, j] := dp[i, j] और 1 + dp[i + 2, j] का न्यूनतम

        • k := i + 2 से शुरू करें, जब k <= j, अपडेट करें (k को 1 से बढ़ाएं), करें:

          • यदि arr[i], arr[k] के समान है, तो:

            • dp[i, j] := dp[i, j] और dp[i + 1, k - 1] + dp[k + 1, j] का न्यूनतम

    • dp[0, n - 1] लौटाएं

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

    उदाहरण

    #include <bits/stdc++.h>
    using namespace std;
    
    class Solution {
    public:
        int minimumMoves(vector& arr) {
            int n = arr.size();
            vector> dp(n + 1, vector(n + 1));
            for (int l = 1; l <= n; l++) {
                for (int i = 0, j = l - 1; j < n; i++, j++) {
                    if (l == 1) {
                        dp[i][j] = 1;
                    } else {
                        dp[i][j] = 1 + dp[i + 1][j];
                        if (i + 1 < n && arr[i] == arr[i + 1])
                            dp[i][j] = min(dp[i][j], 1 + dp[i + 2][j]);
                        for (int k = i + 2; k <= j; k++) {
                            if (arr[i] == arr[k]) {
                                dp[i][j] = min(dp[i][j], dp[i + 1][k - 1] + dp[k + 1][j]);
                            }
                        }
                    }
                }
            }
            return dp[0][n - 1];
        }
    };
    
    int main() {
        Solution ob;
        vector v = {1,2};
        cout << (ob.minimumMoves(v));
    }

    इनपुट

    [1,2]

    आउटपुट

    2
  1. - C++ में स्ट्रिंग के सभी पैलिंड्रोम क्रमपरिवर्तन प्रिंट करें

    इस समस्या में, हमें एक स्ट्रिंग दी गई है और हमें उस स्ट्रिंग के वर्णों से संभव सभी पैलिंड्रोमिक क्रमपरिवर्तन प्रिंट करने हैं। समस्या को समझने के लिए एक उदाहरण लेते हैं - इनपुट - स्ट्रिंग = aabb आउटपुट - abba baab इस समस्या को हल करने के लिए हमें स्ट्रिंग के वर्णों को लेना होगा और एक-एक करके इन वर्णो

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

    समस्या कथनएक स्ट्रिंग S दी गई है, हमें न्यूनतम वर्ण खोजने हैं जिन्हें हम हटा सकते हैं ताकि स्ट्रिंग S का कोई भी परम्यूटेशन पेलिंड्रोम बन जाएउदाहरणयदि str = abcdba तो हम 1 वर्ण हटाते हैं यानी या तो c या d।एल्गोरिदम1. पेलिंड्रोम दो प्रकार के हो सकते हैं, सम लंबाई, और विषम लंबाई पेलिंड्रोम 2. हम इस तथ्

  1. - C++ में जांचें कि संख्या पैलिंड्रोम है या नहीं

    यहां हम देखेंगे कि कैसे जांचें कि कोई संख्या पैलिंड्रोम है या नहीं। पैलिंड्रोम संख्याएं दोनों दिशाओं में समान होती हैं। उदाहरण के लिए, संख्या 12321 एक पैलिंड्रोम है, लेकिन 12345 पैलिंड्रोम नहीं है।तर्क बहुत सीधा है। हमें संख्या को उल्टा करना होगा, और यदि उल्टी संख्या वास्तविक संख्या के समान है, तो व