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

C++ में मान्य पालिंड्रोम III

मान लीजिए हमारे पास एक स्ट्रिंग s और दूसरी संख्या k है; हमें यह जांचना होगा कि दी गई स्ट्रिंग के-पैलिंड्रोम है या नहीं।

एक स्ट्रिंग को के-पैलिंड्रोम कहा जाता है यदि इसे से अधिकतम k वर्णों को हटाकर इसे पैलिंड्रोम में बदला जा सकता है।

इसलिए, यदि इनपुट s ="abcdeca", k =2 जैसा है, तो आउटपुट सत्य होगा जैसे 'b' और 'e' वर्णों को हटाकर, यह पैलिंड्रोम होगा।

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

  • फ़ंक्शन lcs() को परिभाषित करें, इसमें s, t,

    . लगेगा
  • n :=s का आकार

  • s से पहले एक खाली जगह जोड़ें

  • t से पहले एक खाली जगह जोड़ें

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

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

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

      • dp[i, j] :=अधिकतम dp[i-1, j] और dp[i, j-1]

      • यदि s[i] t[j] के समान है, तो -

        • dp[i, j] :=अधिकतम dp[i, j] और 1 + dp[i-1, j-1]

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

  • मुख्य विधि से निम्न कार्य करें -

  • यदि s का आकार नहीं है, तो -

    • सही लौटें

  • x :=रिक्त स्थान

  • इनिशियलाइज़ i के लिए:=s का आकार, जब i>=0, अपडेट करें (i से 1 घटाएँ), करें −

    • x :=x + s[i]

  • s का वापसी आकार

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int lcs(string s, string t){
      int n = s.size();
      s = " " + s;
      t = " " + t;
      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] == t[j])
            dp[i][j] = max(dp[i][j], 1 + dp[i - 1][j - 1]);
         }
      }
      return dp[n][n];
   }
   bool isValidPalindrome(string s, int k) {
      if (!s.size())
      return true;
      string x = "";
      for (int i = s.size() - 1; i >= 0; i--)
         x += s[i];
      return s.size() - lcs(s, x) <= k;
   }
};
main(){
   Solution ob;
   cout << (ob.isValidPalindrome("abcdeca", 2));
}

इनपुट

"abcdeca", 2

आउटपुट

1

  1. सी++ में पालिंड्रोम सबस्ट्रिंग क्वेरीज़

    इस ट्यूटोरियल में, हमें दिए गए स्ट्रिंग के पैलिंड्रोम सबस्ट्रिंग प्रश्नों को हल करने की आवश्यकता है। सी ++ में नियमित प्रश्नों को हल करने की तुलना में पैलिंड्रोम सबस्ट्रिंग प्रश्नों को हल करना कहीं अधिक जटिल है। इसके लिए कहीं अधिक जटिल कोड और तर्क की आवश्यकता है। इस ट्यूटोरियल में, हमें सबस्ट्रिंग

  1. C++ में K अंकों का नौवां पैलिंड्रोम

    k अंकों के n-वें पैलिंड्रोम को खोजने के लिए, हम पहले k अंकों की संख्या से तब तक पुनरावृति कर सकते हैं जब तक कि हमें n-th पैलिंड्रोम संख्या नहीं मिल जाती। यह दृष्टिकोण कुशल नहीं है। आप इसे स्वयं आजमा सकते हैं। अब, k अंकों के n-वें पैलिंड्रोम को खोजने के लिए कुशल तरीका देखते हैं। संख्या में दो भाग ह

  1. C++ में मान्य सुडोकू

    मान लीजिए कि हमने एक 9×9 मैट्रिक्स दिया है जिसे सुडोकू कहा जाता है। कार्य यह जांचना है कि दिया गया सुडोकू पैटर्न मान्य है या नहीं। सामान्य तौर पर, सुडोकू बोर्ड इस तरह दिखता है, सुडोकू के नियम - प्रत्येक पंक्ति में 1-9 की श्रेणी में एक संख्या होती है प्रत्येक कॉलम में 1-9 की श्रेणी में संख्