새소식

반응형
Algotithms

[프로그래머스] 가장 긴 펠린드롬

  • -
728x90
반응형

문제

  • 앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬이라고 한다. 문자열 s가 주어질 때, s의 부분문자열 중 가장 긴 팰린드롬의 길이를 리턴하기
  • 1 <= 문자열 길이 <- 2500

 

풀이

  • 문자열의 길이가 1이면 펠린드롬이다.
  • 문자열의 길이가 2이면 'aa', 'cc' 등 같은 문자여야 펠린드롬이다.
  • 문자열의 길이가 3 이상이면,
    'aca' 'abcba' 등 첫 번째와 마지막 문자가 동일하고, 가운데 문자열이 펠린드롬이어야 한다.

 

def solution(s):
    n = len(s)
    # dp[i][j] : i~j 문자열 중 가장 긴 팰린드롬의 길이
    dp = [[False]*n for _ in range(n)]
    # dp 초기화
    for i in range(n-1) :
        dp[i][i] = True         # 길이가 1인 문자열
        if s[i] == s[i+1] :     # 길이가 2인 문자열
            dp[i][i+1] = True
    dp[n-1][n-1] = True
    
    for d in range(2, n):       # 길이가 3 ~ n-1인 문자열
        for start in range(n-d):
            end = start + d
            if end > n : break
            
            if s[start] == s[end] and dp[start+1][end-1] :
                dp[start][end] = True
    
    # 가장 긴 문자열 길이 구하기
    answer = 1
    for start in range(n) :
        for end in range(start+1, n) :
            if dp[start][end] :
                answer = max(answer, end-start+1)
    return answer

 

References

  • 프로그래머스 Lv3
반응형

'Algotithms' 카테고리의 다른 글

[백준] 2624 동전 바꿔주기  (0) 2023.08.21
[백준] 1342 폴리오미노  (0) 2023.08.21
[프로그래머스] 최고의 집합  (0) 2023.08.16
[백준] 18352 특정 거리의 도시 찾기  (0) 2023.08.16
[백준] 2606 바이러스  (0) 2023.08.16
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.