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

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

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

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

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

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

  • एक फ़ंक्शन lcs() परिभाषित करें, जो s, t लेगा,

  • n := s का आकार

  • s से पहले एक ब्लैंक स्पेस जोड़ें

  • t से पहले एक ब्लैंक स्पेस जोड़ें

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

  • 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] का अधिकतम

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

  • मुख्य मेथड से निम्नलिखित करें:

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

    • true लौटाएं

  • 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> dp(n + 1, vector(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;
    }
};

int main() {
    Solution ob;
    cout << (ob.isValidPalindrome("abcdeca", 2));
}

इनपुट

"abcdeca", 2

आउटपुट

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

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

  1. - C++ में K अंकों की nवीं पेलिंड्रोम संख्या

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

  1. C++ में वैलिड सुडोकू C++ में वैलिड सुडोकू

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