본문 바로가기

Algorithm/Practice

Programmers - 가장 긴 팰린드롬 (V)

 

 

문제 

문자열 s의 부분 문자열 중 앞뒤를 뒤집어도 똑같은 문자열 중 가장 긴 문자열을 구하라.

 

 

 

로직 

1. s의 길이를 구한다.

2. s의 초기 길이부터 1을 빼가며 진행

3. 앞뒤로 같은지 판단하고 같으면 종료

 

 

이 문제는 어렵지 않지만 효율성에서 .substring, .StringBuilder의 reverse, 등을 활용해 경우마다 부분문자열을 구하는 것보다는 인덱스를 통해 비교하는 것이 더 효율적이라는 것을 기록하기 위해서 작성한다.

 

 

코드

class Solution{
    public int solution(String s){
        int length = s.length();
        while(true){
            if(length <= 1){
                return 1;
            }
            for(int i=0; i+length<=s.length(); i++){
                boolean success = true;
                int mid = i+length/2;
                int y = i+length-1;
                for(int x=i; x<=mid; x++){
                    if(s.charAt(x) != s.charAt(y)){
                        success = false;
                        break;
                    }
                    y -= 1;
                }
                if(success){
                    return length;
                }
            }  
            length -= 1;
        }
    }
}