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

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


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

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

  • स्ट्रिंग की लंबाई के समान क्रम का एक वर्ग मैट्रिक्स परिभाषित करें, और इसे False से भरें
  • मेजर डायगोनल एलिमेंट्स को true पर सेट करें, इसलिए DP[i, i] = True सभी i के लिए 0 से order - 1 तक
  • start := 0
  • l को 2 से S की लंबाई + 1 तक की रेंज में लिए लिए
    • i को 0 से S की लंबाई - l + 1 तक की रेंज में लिए
      • end := i + l
      • यदि l = 2, तो
        • यदि S[i] = S[end - 1], तो
          • DP[i, end - 1] = True, max_len := l, और start := i
      • अन्यथा
        • यदि S[i] = S[end - 1] और DP[i + 1, end - 2], तो
          • DP[i, end - 1] = True, max_len := l, और start := i
  • इंडेक्स start से start + max_len तक का सबस्ट्रिंग लौटाएं

उदाहरण (पायथन)

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

class Solution(object):
    def longestPalindrome(self, s):
        dp = [[False for i in range(len(s))] for i in range(len(s))]
        for i in range(len(s)):
            dp[i][i] = True
        max_length = 1
        start = 0
        for l in range(2, len(s)+1):
            for i in range(len(s)-l+1):
                end = i+l
                if l==2:
                    if s[i] == s[end-1]:
                        dp[i][end-1]=True
                        max_length = l
                        start = i
                else:
                    if s[i] == s[end-1] and dp[i+1][end-2]:
                        dp[i][end-1]=True
                        max_length = l
                        start = i
        return s[start:start+max_length]

ob1 = Solution()
print(ob1.longestPalindrome("ABBABBC"))

इनपुट

"ABBABBC"

आउटपुट

"BBABB"

  1. - Python में पैलिंड्रोमिक उपस्ट्रिंग

    मान लीजिए हमारे पास एक स्ट्रिंग है; हमें गिनना है कि इस स्ट्रिंग में कितने पैलिंड्रोमिक उपस्ट्रिंग मौजूद हैं। अलग-अलग प्रारंभ सूचकांक या अंत सूचकांक वाले उपस्ट्रिंग को अलग-अलग उपस्ट्रिंग के रूप में गिना जाता है भले ही उनमें समान वर्ण हों। इसलिए यदि इनपुट aaa है, तो आउटपुट 6 होगा क्योंकि छह पैलिंड्रो

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

    मान लीजिए हमारे पास एक स्ट्रिंग है। हमें बिना वर्णों को दोहराए सबसे लंबा सबस्ट्रिंग ढूंढना है। इसलिए यदि स्ट्रिंग ABCABCBB जैसी है, तो परिणाम 3 होगा, क्योंकि लंबाई 3 का एक सबस्ट्रिंग है जो दोहरा रहा है। वह है ABC। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे: i := 0, j := 0 सेट करें, जानकारी स्

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

    समस्या विवरण दो स्ट्रिंग्स दी गई हैं, हमारा कार्य सबसे लंबा सामान्य सब-स्ट्रिंग प्रिंट करना है। हम इस समस्या को पायथन में SequenceMatcher.find_longest_match() विधि का उपयोग करके हल करेंगे। क्लास difflib.SequenceMatcher किसी भी प्रकार के अनुक्रमों के जोड़े की तुलना के लिए एक लचीला वर्ग है, बशर्ते अनु