algorithm/프로그래머스

[프로그래머스] 가장 긴 팰린드롬 (07.31)

자바왕세자 2020. 7. 31. 15:13

문제

https://programmers.co.kr/learn/courses/30/lessons/12904

 

코딩테스트 연습 - 가장 긴 팰린드롬

앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요. 예를들

programmers.co.kr

 

접근법

팰린드롬이 되기 위해선 두 가지 경우의 수가 있다.

aba 처럼 홀수개인 경우

abba 처럼 짝수개인 경우

checkOdd 메서드를 통해서 홀수개인 경우를 체크하고

checkEven 메서드를 통해서 짝수새인 경우를 체크한다.

그 경우 중의 큰 값이 asnwer에 저장되게 된다.

 

코드

class Solution{
    public int solution(String s) {
        int answer = 0;

        for(int i=0;i<s.length();i++){
            answer = Math.max(answer, Math.max(checkOdd(i, s), checkEven(i,s)));
        }

        return answer;
    }
    
    private int checkOdd(int i, String s){
        int cnt = 0;
        
        for(int j=i, k=i; j>=0 && k<s.length(); j--, k++){
            if(s.charAt(j) == s.charAt(k))
                cnt++;
            else
                break;
        }
        return cnt*2-1;
    }
    
    private int checkEven(int i, String s){
        int cnt = 0;
        
        for(int j=i, k=i+1;j>=0 && k<s.length(); j--, k++){
            if(s.charAt(j) == s.charAt(k))
                cnt++;
            else
                break;
        }
        
        return cnt*2;
    }
}