Heim >Backend-Entwicklung >Python-Tutorial >Codierungsherausforderungen: Beteiligen Sie sich und lernen Sie durch Problemlösung
Codierungsherausforderungen sind eine fantastische Möglichkeit, Ihre Programmierkenntnisse zu verbessern, mit einer Community in Kontakt zu treten und neue Techniken zu erlernen. In diesem Blogbeitrag stellen wir eine Codierungsherausforderung vor, diskutieren verschiedene Lösungsansätze und laden die Leser ein, ihre Lösungen in den Kommentaren zu teilen. Lasst uns eintauchen!
Problem:
Finden Sie bei gegebener Zeichenfolge s die längste palindromische Teilzeichenfolge in s. Ein Palindrom ist eine Zeichenfolge, die rückwärts wie vorwärts dasselbe liest.
Beispiel:
Input: s = "babad" Output: "bab" Note: "aba" is also a valid answer.
Einschränkungen:
Bevor Sie in den Code einsteigen, stellen Sie sicher, dass Sie das Problem verstanden haben. Eine palindromische Teilzeichenfolge ist eine Folge von Zeichen, die sich rückwärts wie vorwärts lesen lässt. Unser Ziel ist es, den längsten solchen Teilstring in der angegebenen Zeichenfolge s zu finden.
Es gibt mehrere Möglichkeiten, dieses Problem zu lösen. Wir besprechen drei Ansätze:
Beim Brute-Force-Ansatz werden alle möglichen Teilzeichenfolgen überprüft und festgestellt, ob es sich um Palindrome handelt. Diese Methode ist unkompliziert, aber für große Strings nicht effizient.
def longest_palindrome_brute_force(s): def is_palindrome(sub): return sub == sub[::-1] n = len(s) longest = "" for i in range(n): for j in range(i, n): if is_palindrome(s[i:j+1]) and len(s[i:j+1]) > len(longest): longest = s[i:j+1] return longest print(longest_palindrome_brute_force("babad")) # Output: "bab" or "aba" <h4> Schritt 4: Implementieren Sie den „Expand Around Center“-Ansatz </h4> <p>Dieser Ansatz beinhaltet die Erweiterung um jedes Zeichen (und zwischen Zeichen), um das längste Palindrom zu finden. Es ist effizienter als rohe Gewalt.<br> </p> <pre class="brush:php;toolbar:false">def longest_palindrome_expand_center(s): def expand_around_center(left, right): while left >= 0 and right < len(s) and s[left] == s[right]: left -= 1 right += 1 return s[left+1:right] longest = "" for i in range(len(s)): # Odd length palindromes odd_palindrome = expand_around_center(i, i) if len(odd_palindrome) > len(longest): longest = odd_palindrome # Even length palindromes even_palindrome = expand_around_center(i, i+1) if len(even_palindrome) > len(longest): longest = even_palindrome return longest print(longest_palindrome_expand_center("babad")) # Output: "bab" or "aba"
Der dynamische Programmieransatz verwendet eine Tabelle, um zu speichern, ob ein Teilstring ein Palindrom ist, was zu einer effizienten Lösung führt.
def longest_palindrome_dp(s): n = len(s) if n == 0: return "" dp = [[False] * n for _ in range(n)] start, max_length = 0, 1 for i in range(n): dp[i][i] = True for length in range(2, n+1): for i in range(n-length+1): j = i + length - 1 if s[i] == s[j]: if length == 2 or dp[i+1][j-1]: dp[i][j] = True if length > max_length: start = i max_length = length return s[start:start+max_length] print(longest_palindrome_dp("babad")) # Output: "bab" or "aba"
Das obige ist der detaillierte Inhalt vonCodierungsherausforderungen: Beteiligen Sie sich und lernen Sie durch Problemlösung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!