앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다.
문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요.
예를들면, 문자열 s가 "abcdcba"이면 7을 return하고 "abacde"이면 3을 return합니다.
문자열 s의 길이 : 2,500 이하의 자연수
문자열 s는 알파벳 소문자로만 구성
def solution(s):
answer = 0
maxOddCnt = 0
maxEvenCnt = 0
for i in range(len(s)):
oddCnt = 0
evenCnt = 0
# 짝수
if i+1 != len(s) and s[i] == s[i+1]:
for j in range(1, min(i, len(s)-i-2)+1):
if s[i+1+j] == s[i-j]:
evenCnt += 1
else:
break
# 홀수
for j in range(1, min(i, len(s)-i-1)+1):
if s[i+j] == s[i-j]:
oddCnt += 1
else:
break
if maxOddCnt <= oddCnt:
maxOddCnt = oddCnt
if maxEvenCnt <= evenCnt:
maxEvenCnt = evenCnt
if maxEvenCnt == 0 and maxOddCnt == 0:
return 1
answer = max(maxOddCnt*2+1, maxEvenCnt*2+2)
return answer
가운데 글자를 기준으로 하나씩 비교하며 대칭을 찾았다
이때, aaaa같은 짝수 일때랑 aaaaa같은 홀수를 구분하기 위해 oddCnt랑 evenCnt를 따로 만들어 줘서 해결했는데 다른 사람의 풀이를 보니까 너무 어렵게 푼것 같다;;
def longest_palindrom(s):
s = s.lower()
results = []
for i in range(len(s)):
for j in range(i):
chunk = s[j:i + 1]
if chunk == chunk[::-1]:
results.append(chunk)
return len(max(results, key=len))
그냥 i랑 j를 활용해 2중 for문으로
모든 문자열을 chunk에 담고
chunk[::-1]을 써서 거꾸로한뒤 비교해서 같으면 리스트에 넣어주고
가장 긴 값을 리턴하면 된다ㅋㅋ..