[프로그래머스] LV 3 가장 긴 팰린드롬

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

접근 방법

  1. 팰린드롬이 되는 경우는 2가지가 있다.
    1. aaabbb
    2. aaacbbb
  2. 위처럼 중간에 하나의 문자는 끼어있어도 팰린드롬 수이이다.
  3. 따라서 s를 선형탐색하며 팰린드롬을 찾는 find함수를 실행했다.
    1. 문자열 s범위내이고, l,r 포인터의 문자가 같을경우 좌우로 퍼져가며 탐색
    2. l,r 포인터가 한번 더 진행하므로 r-l+1-2 => r-l-1이 해당 팰린드롬 수의 길이가 된다.
    3. 전역변수 ans를 대소비교를 통해 갱신한다

코드

class Solution{
    int n = 0;
    int ans = 0;
    public int solution(String s){
        n = s.length();
        if(n == 1) return 1;
        for(int i = 1 ; i < n ; i++){
            find(i-1,i,s);
            find(i-1,i+1,s);
        }
        return ans;
    }
    
    void find(int l, int r,String s){
        while(!OOB(l,r) && s.charAt(l) == s.charAt(r)){
            l--;
            r++;
        }
        
        ans = Math.max(ans,r-l-1);
    }
    boolean OOB(int l,int r){
        return l < 0 || r >= n;
    }
}