코딩 챌린지는 프로그래밍 기술을 향상하고, 커뮤니티에 참여하고, 새로운 기술을 배울 수 있는 환상적인 방법입니다. 이 블로그 게시물에서는 코딩 문제를 제시하고 이를 해결하기 위한 다양한 접근 방식에 대해 논의하며 독자들이 댓글로 솔루션을 공유하도록 초대할 것입니다. 뛰어들어 보세요!
문제:
문자열 s가 주어지면 s에서 가장 긴 회문 부분 문자열을 찾습니다. 회문은 뒤에서 읽어도 앞으로 읽어도 같은 문자열입니다.
예:
Input: s = "babad" Output: "bab" Note: "aba" is also a valid answer.
제약조건:
코드를 시작하기 전에 문제를 이해했는지 확인하세요. 회문 부분 문자열은 앞으로 읽어도 뒤로 읽어도 같은 문자 시퀀스입니다. 우리의 목표는 주어진 문자열 s에서 가장 긴 부분 문자열을 찾는 것입니다.
이 문제를 해결하는 방법에는 여러 가지가 있습니다. 세 가지 접근 방식에 대해 논의하겠습니다.
무차별 접근 방식에는 가능한 모든 하위 문자열을 검사하고 그것이 회문인지 확인하는 작업이 포함됩니다. 이 방법은 간단하지만 큰 문자열에는 효율적이지 않습니다.
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> 4단계: 중심 중심 접근 방식 구현 </h4> <p>이 접근 방식에는 가장 긴 회문을 찾기 위해 각 문자 주변(및 문자 간)을 확장하는 작업이 포함됩니다. 무차별 대입보다 더 효율적입니다.<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"
동적 프로그래밍 접근 방식은 테이블을 사용하여 하위 문자열이 회문인지 여부를 저장하여 효율적인 솔루션을 제공합니다.
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"
위 내용은 코딩 과제: 문제 해결을 통해 참여하고 학습의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!