सबसे लंबा पैलिंड्रोमिक क्रम किसी दिए गए अनुक्रम का अनुवर्ती होता है, और उसके बाद का पलिंड्रोम होता है।
इस समस्या में, वर्णों का एक क्रम दिया गया है, हमें पैलिंड्रोमिक अनुक्रम की सबसे लंबी लंबाई ज्ञात करनी है।
इस समस्या को हल करने के लिए, हम पुनरावर्ती सूत्र का उपयोग कर सकते हैं,
यदि L (0, n-1) का उपयोग सबसे लंबे पैलिंड्रोमिक अनुक्रम की लंबाई को संग्रहीत करने के लिए किया जाता है, तो
L (0, n-1) :=L (1, n-2) + 2 (जब 0'वें और (n-1)वें वर्ण समान हों)।
इनपुट और आउटपुट
इनपुट:विभिन्न अक्षरों या प्रतीकों के साथ एक स्ट्रिंग। मान लें कि इनपुट "ABCDEEAB" आउटपुट है:सबसे बड़े पैलिंड्रोमिक बाद की सबसे लंबी लंबाई। यहाँ यह है 4.ABCDEEAB। तो पैलिंड्रोम AEEA है।
एल्गोरिदम
palSubSeqLen(str)
इनपुट - दी गई स्ट्रिंग।
आउटपुट - सबसे लंबे पैलिंड्रोमिक बाद की लंबाई।
आरंभ n =स्ट्रिंग की लंबाई len नामक एक तालिका बनाएं जिसका आकार n x n है और कॉलम के लिए 1s भरें:=2 से n, i के लिए करें:=0 से n - col, do 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] किया हुआ रिटर्न लेनटेबल[0, n-1]Endहो गया पूर्व>उदाहरण
#शामिल करेंनेमस्पेस का उपयोग करना std;int max (int x, int y) {रिटर्न (x> y)? x :y;}int palSubseqLen(string str) { int n =str.size (); इंट लेनटेबल [एन] [एन]; // उप-समस्याओं के परिणामों को संग्रहीत करने के लिए एक तालिका बनाएं (int i =0; i आउटपुट
सबसे लंबे पलिंड्रोम के बाद की लंबाई है:4