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

Python से सबसे लंबे पैलिंड्रोमिक सबसीक्वेंस की लंबाई कैसे ढूंढें?

डायनामिक प्रोग्रामिंग से ऐसा सबसे लंबा सम-लंबाई पैलिंड्रोमिक सबसीक्वेंस ढूंढें जिसमें मध्य को छोड़कर लगातार समान कैरेक्टर्स न हों।

एल्गोरिदम

  • n = स्ट्रिंग लंबाई।
  • dp = n×n 2D ऐरे जहां प्रत्येक सेल एक पेयर (length, char) स्टोर करता है।
  • बॉटम-अप DP: i = n-1 से 0, j = i+1 से n-1 तक।
  • अगर s[i] == s[j] और dp[i+1][j-1][1] != s[i], तो dp[i][j] = (dp[i+1][j-1][0] + 2, s[i])।
  • अन्यथा तीनों में से मैक्स लें: dp[i+1][j], dp[i][j-1], dp[i+1][j-1]।
  • उत्तर dp[0][n-1][0]।

उदाहरण कोड

def solve(s):
    n = len(s)
    dp = [[(0, '')] * n for _ in range(n)]
    for i in range(n-1, -1, -1):
        for j in range(i+1, n):
            if s[i] == s[j] and dp[i+1][j-1][1] != s[i]:
                dp[i][j] = (dp[i+1][j-1][0] + 2, s[i])
            else:
                dp[i][j] = max(dp[i+1][j], dp[i][j-1], dp[i+1][j-1], key=lambda x: x[0])
    return dp[0][n-1][0]

print(solve('efeffe'))  # आउटपुट: 4

इनपुट/आउटपुट

इनपुट: 'efeffe'
आउटपुट: 4 (सबसीक्वेंस 'effe')

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

    मान लीजिए हमारे पास एक बाइनरी मैट्रिक्स है, जहां 0 खाली सेल दर्शाता है और 1 दीवार दर्शाता है। हम पहली पंक्ति के किसी भी खाली सेल से शुरू कर सकते हैं और अंतिम पंक्ति के किसी भी खाली सेल पर समाप्त करना चाहते हैं। हम बाएं, दाएं या नीचे जा सकते हैं, हमें सबसे लंबा ऐसा पथ ढूंढना है जहां हम प्रत्येक सेल क

  1. पायथन में n-ary ट्री में सबसे लंबे पथ की लंबाई खोजने का प्रोग्राम पायथन में n-ary ट्री में सबसे लंबे पथ की लंबाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास एक एज लिस्ट है जहां प्रत्येक आइटम (u, v) रखता है जो दर्शाता है कि u, v का पैरेंट है। हमें ट्री में सबसे लंबे पथ की लंबाई ढूंढनी है। पथ की लंबाई 1 + उस पथ में नोड्स की संख्या है। उदाहरण के लिए, यदि इनपुट है: तो आउटपुट 5 होगा, क्योंकि पथ [1, 4, 5, 7] है, कुल 4 नोड्स हैं, इसलिए पथ

  1. Python से बाइनरी ट्री में दिए गए नोड के दाएं वाले नोड को कैसे ढूंढें? Python से बाइनरी ट्री में दिए गए नोड के दाएं वाले नोड को कैसे ढूंढें?

    लेवल ऑर्डर ट्रैवर्सल (BFS) से दिए गए नोड के उसी लेवल पर दाएं पड़ोसी नोड को ढूंढें। एल्गोरिदम क्यू से BFS, लेवल दर लेवल प्रोसेस करें। प्रत्येक लेवल के नोड्स को temp लिस्ट में स्टोर करें। अगर टारगेट नोड u मिले तो उसका इंडेक्स नोट करें। अगर इंडेक्स अंतिम है तो None रिटर्न (दाएं कोई नहीं)। अन्यथा temp[