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

C++ पर पालिंड्रोम हटाना

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

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

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

  • n :=गिरफ्तारी का आकार

  • एक 2D सरणी dp आकार (n + 1) x (n + 1)

    . को परिभाषित करें
  • इनिशियलाइज़ l के लिए :=1, जब l <=n, अपडेट करें (l को 1 से बढ़ाएँ), करें -

    • इनिशियलाइज़ करने के लिए i :=0, j :=l-1, जब j

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

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

      • अन्यथा

        • डीपी [आई, जे]:=1 + डीपी [i + 1, जे]

        • अगर i + 1

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

        • k :=i + 2 को इनिशियलाइज़ करने के लिए, जब k <=j, अपडेट करें (k को 1 से बढ़ाएँ), करें -

          • अगर गिरफ्तारी [i] गिरफ्तारी [के] के समान है, तो -

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

  • वापसी डीपी [0, एन -1]

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int minimumMoves(vector<int>& arr) {
      int n = arr.size();
      vector<vector<int> > dp(n + 1, vector<int>(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];
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2};
   cout << (ob.minimumMoves(v));
}

इनपुट

[1,2]

आउटपुट

2

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

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

  1. C++ में पैलिंड्रोम क्रमपरिवर्तन करने के लिए न्यूनतम निष्कासन

    समस्या कथन एक स्ट्रिंग S को देखते हुए, हमें न्यूनतम वर्ण खोजने होंगे जिन्हें हम स्ट्रिंग S के किसी भी क्रमपरिवर्तन को एक पैलिंड्रोम बनाने के लिए हटा सकते हैं उदाहरण यदि str =abcdba है तो हम 1 वर्ण यानी c या d को हटा देते हैं। एल्गोरिदम 1. There can be two types of a palindrome, even length, and od

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

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