자료구조 & 알고리즘/== 투포인터 ==

투포인터 문제 - 가장 긴 팰린드롬 부분 문자열

꾸준함의 미더덕 2024. 7. 15. 19:07
가장 긴 팰린드롬 부분 문자열을 출력하라

input: dcbabcdd
output: dcbabcd

 

 

/**
 * 팰린드롬은 짝수 / 홀수 케이스 구분하는 것 주의
 */
class Solution {
    public String longestPalindrome(String s){
         if(s.length() == 1){
            return s;
        }

        String result = s.substring(0, 1); //제일 작은 팰린드롬은 글자 하나 (한글자도 팰린드롬이라고 보는 경우)

        for (int i = 0; i < s.length(); i++) {
            /**
             * 팰린드롬은 짝수 / 홀수 케이스 구분하는 것 주의
             */
            String evenStr = getMaxPalindrome(s, i, i + 1); //짝수
            String oddStr = getMaxPalindrome(s, i, i + 2); //홀수

            String longerStr = evenStr.length() > oddStr.length() ? evenStr : oddStr;
            result = result.length() > longerStr.length() ? result : longerStr;
        }

        return result;
    }

    private String getMaxPalindrome(String s, int left, int right) {
        if(left < 0 || right >= s.length()){
            return "";
        }

        while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
            left--;
            right++;
        }

        return s.substring(left + 1, right);
    }
}