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

सबसे लंबा पैलिंड्रोमिक सबसीक्वेंस

सबसे लंबा पैलिंड्रोमिक सबसीक्वेंस एक दिए गए अनुक्रम का सबसीक्वेंस है, और वह सबसीक्वेंस एक पैलिंड्रोम है।

इस समस्या में, एक कैरेक्टर अनुक्रम दिया गया है, हमें पैलिंड्रोमिक सबसीक्वेंस की सबसे लंबी लंबाई ढूंढनी है।

इस समस्या को हल करने के लिए, हम रिकर्सिव फॉर्मूला का उपयोग कर सकते हैं:

यदि L(0, n-1) सबसे लंबे पैलिंड्रोमिक सबसीक्वेंस की लंबाई स्टोर करता है, तो
L(0, n-1) := L(1, n-2) + 2 (जब 0वां और (n-1)वां कैरेक्टर समान हों)।

इनपुट और आउटपुट

इनपुट: अलग-अलग अक्षरों या प्रतीकों वाली एक स्ट्रिंग। मान लें इनपुट "ABCDEEAB" है
आउटपुट: सबसे बड़े पैलिंड्रोमिक सबसीक्वेंस की सबसे लंबी लंबाई। यहां यह 4 है।
ABCDEEAB। तो पैलिंड्रोम है AEEA।

एल्गोरिदम

palSubSeqLen(str)

इनपुट: दी गई स्ट्रिंग
आउटपुट: सबसे लंबे पैलिंड्रोमिक सबसीक्वेंस की लंबाई

शुरुआत
    n = स्ट्रिंग की लंबाई
    lenTable नामक n x n आकार की टेबल बनाएं और 1s से भरें
    col := 2 से n तक, करें
        i := 0 से n - col तक, करें
            j := i + col - 1
            यदि str[i] = str[j] और col = 2, तो
                lenTable[i, j] := 2
            अन्यथा यदि str[i] = str[j], तो
                lenTable[i, j] := lenTable[i+1, j-1] + 2
            अन्यथा
                lenTable[i, j] := lenTable[i, j-1] और lenTable[i+1, j] का अधिकतम
        पूर्ण
    पूर्ण
    वापस lenTable[0, n-1]
अंत

उदाहरण (C++ कोड)

#include <iostream>
using namespace std;

int max(int x, int y) {
    return (x > y) ? x : y;
}

int palSubseqLen(string str) {
    int n = str.size();
    int lenTable[n][n];
    
    for (int i = 0; i < n; i++)
        lenTable[i][i] = 1;
    
    for (int col = 2; col <= n; col++) {
        for (int i = 0; i < n-col+1; i++) {
            int j = i + col - 1;
            if (str[i] == str[j] && col == 2)
                lenTable[i][j] = 2;
            else if (str[i] == str[j])
                lenTable[i][j] = lenTable[i+1][j-1] + 2;
            else
                lenTable[i][j] = max(lenTable[i][j-1], lenTable[i+1][j]);
        }
    }
    return lenTable[0][n-1];
}

int main() {
    string sequence = "ABCDEEAB";
    int n = sequence.size();
    cout << "The length of the longest palindrome subsequence is: " << palSubseqLen(sequence);
}

आउटपुट

The length of the longest palindrome subsequence is: 4
  1. - पायथन में सबसे लंबे पैलिंड्रोमिक सबसीक्वेंस की लंबाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक लोअरकेस स्ट्रिंग s है; हमें s में सबसे लंबे पैलिंड्रोमिक सबसीक्वेंस की लंबाई ढूंढनी है।उदाहरण के लिए, यदि इनपुट s = aolpeuvekyl है, तो आउटपुट 5 होगा, क्योंकि पैलिंड्रोम level है।समाधान दृष्टिकोणइस समस्या को हल करने के लिए हम रिकर्सिव DP (डायनामिक प्रोग्रामिंग) का उपयोग करेंगे:

  1. - पायथन में सबसे लंबा बढ़ता हुआ सबसीक्वेंस

    मान लीजिए हमारे पास पूर्णांकों की एक अनसॉर्टेड लिस्ट है। हमें सबसे लंबा बढ़ता हुआ सबसीक्वेंस ढूंढना है। इसलिए यदि इनपुट [10,9,2,5,3,7,101,18] है, तो आउटपुट 4 होगा, क्योंकि बढ़ता हुआ सबसीक्वेंस [2,3,7,101] है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - trail := लंबाई 0 से nums की लंबाई - 1 तक

  1. - पायथन में सबसे लंबा पालिंड्रोमिक सबस्ट्रिंग

    मान लीजिए हमारे पास एक स्ट्रिंग S है। हमें S में सबसे लंबा पालिंड्रोमिक सबस्ट्रिंग ढूंढना है। हम मान रहे हैं कि स्ट्रिंग S की लंबाई 1000 है। इसलिए यदि स्ट्रिंग BABAC है, तो सबसे लंबा पालिंड्रोमिक सबस्ट्रिंग BAB है। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे: स्ट्रिंग की लंबाई के समान क्रम का