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

पायथन में सबसीक्वेंस से अधिकतम पालिंड्रोम लंबाई खोजने का प्रोग्राम


मान लीजिए हमारे पास दो स्ट्रिंग्स हैं, s और t। हम निम्न तरीके से एक स्ट्रिंग बनाना चाहते हैं:

  • s से कोई नॉन-एम्प्टी सबसीक्वेंस sub1 चुनें।

  • t से कोई नॉन-एम्प्टी सबसीक्वेंस sub2 चुनें।

  • sub1 और sub2 को जोड़कर स्ट्रिंग बनाएं।

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

उदाहरण के लिए, यदि इनपुट है s = "hillrace" और t = "cargame", तो आउटपुट 7 होगा क्योंकि हम s से "race" और t से "car" ले सकते हैं, जिससे "racecar" पालिंड्रोम बनेगा जिसकी लंबाई 7 है।

समाधान दृष्टिकोण

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

  • n := s का आकार, m := t का आकार

  • word := s + t (दोनों स्ट्रिंग्स को जोड़ें)

  • dp := (n+m) x (n+m) आकार का 2D ऐरे बनाएं और 0 से भरें

  • i को (n + m - 1) से 0 तक घटाते हुए लूप चलाएं

    • j को i से (n + m - 1) तक लूप चलाएं

      • यदि i, j के बराबर है, तो dp[i][j] := 1

      • अन्यथा यदि word[i], word[j] के बराबर है, तो dp[i][j] := 2 + dp[i+1][j-1]

      • अन्यथा, dp[i][j] := max(dp[i+1][j], dp[i][j-1])

  • ans := 0

  • i को 0 से n-1 तक लूप चलाएं

    • j को m-1 से 0 तक घटाते हुए लूप चलाएं

      • यदि s[i], t[j] के बराबर है, तो ans = max(ans, dp[i][n+j])

  • ans लौटाएं

उदाहरण

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

def solve(s, t):
    n, m = len(s), len(t)
    word = s + t
    dp = [[0] * (n + m) for _ in range(n + m)]
    for i in range(n + m - 1, -1, -1):
        for j in range(i, n + m):
            if i == j:
                dp[i][j] = 1
            elif word[i] == word[j]:
                dp[i][j] = 2 + dp[i + 1][j - 1]
            else:
                dp[i][j] = max(dp[i + 1][j], dp[i][j - 1])
    ans = 0
    for i in range(n):
        for j in range(m - 1, -1, -1):
            if s[i] == t[j]:
                ans = max(ans, dp[i][n + j])
    return ans

s = "hillrace"
t = "cargame"
print(solve(s, t))

इनपुट

s = "hillrace", t = "cargame"

आउटपुट

7
  1. - पायथन में गैर-साझा शब्दों की अधिकतम लंबाई खोजने का प्रोग्राम

    मान लीजिए हमारे पास words नामक लोअरकेस वर्णमाला स्ट्रिंग्स की एक सूची है, हमें दो अलग-अलग शब्दों की लंबाई का अधिकतम योग ढूंढना है जो एक सामान्य अक्षर साझा नहीं करते। इसलिए, यदि इनपुट words = [abcd, mno, abdcmno, amno] जैसा है, तो आउटपुट 7 होगा, क्योंकि जो शब्द कोई सामान्य अक्षर साझा नहीं करते वे [ab

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

    मान लीजिए हमारे पास एक स्ट्रिंग S है। हमें S में सबसे लंबे पैलिंड्रोमिक सबस्ट्रिंग की लंबाई ढूंढनी है। हम मान रहे हैं कि स्ट्रिंग S की लंबाई 1000 है। उदाहरण के लिए, यदि स्ट्रिंग BABAC है, तो सबसे लंबा पैलिंड्रोमिक सबस्ट्रिंग BAB है और इसकी लंबाई 3 है।समाधान दृष्टिकोण (डायनामिक प्रोग्रामिंग)इस समस्या

  1. - पायथन प्रोग्राम सूची से N सबसे बड़े तत्व खोजने के लिए

    एक पूर्णांक सूची दी गई है, हमारा कार्य सूची में N सबसे बड़े तत्व ढूंढना है। उदाहरण इनपुट : [40, 5, 10, 20, 9] N = 2 आउटपुट: [40, 20] एल्गोरिदम चरण 1: एक पूर्णांक सूची और सबसे बड़ी संख्या की संख्या इनपुट करें। चरण 2: पहले सूची को N बार पार करें। चरण 3: प्रत्येक पारगमन में सबसे बड़ा मान ढूंढें और इसे