[프로그래머스] 가장 긴 펠린드롬 (java) String
가장 긴 펠린드롬 (프로그래머스 > String)
문제설명
앞뒤를 뒤집어도 똑같은 문자열을 팰린드롬(palindrome)이라고 합니다. 문자열 s가 주어질 때, s의 부분문자열(Substring)중 가장 긴 팰린드롬의 길이를 return 하는 solution 함수를 완성해 주세요.
예를들면, 문자열 s가 abcdcba이면 7을 return하고 abacde이면 3을 return합니다.
제한사항
- 문자열 s의 길이 : 2,500 이하의 자연수
- 문자열 s는 알파벳 소문자로만 구성
입출력 예
s | answer |
---|---|
abcdcba | 7 |
abacde | 3 |
입출력 예 설명
입출력 예 #1 4번째자리 ‘d’를 기준으로 문자열 s 전체가 팰린드롬이 되므로 7을 return합니다.
입출력 예 #2 2번째자리 ‘b’를 기준으로 aba가 팰린드롬이 되므로 3을 return합니다.
풀이
package String;
//40min
public class prog_3_가장긴펠린드롬 {
static public int solution(String s){
int answer = 0;
if(s.length() == 1)
return 1;
if(s.length() == 0)
return 0;
//홀수라고 가정
for(int i=1; i<s.length()-1; i++) {
int len = 0;
int front = i-1;
int back = i+1;
int ck=0;
while(true) {
if(front >=0 && back<s.length()) { //조건 걸어주고
if(s.charAt(front) == s.charAt(back)) {
if(ck==0) {
len = 1;
ck++;
}
len = len+2;
front--; back++;
}
else
break;
}
else
break;
}//while
answer = Math.max(answer,len);
}
//짝수라고 가정
for(int i=1; i<s.length(); i++) {
int len = 0;
int front = i-1;
int back = i;
while(true) {
if(front >=0 && back<s.length()) { //조건 걸어주고
if(s.charAt(front) == s.charAt(back)) {
len = len+2;
front--; back++;
}
else
break;
}
else
break;
}//while
answer = Math.max(answer,len);
}
return answer;
}
public static void main(String[] args) {
System.out.println(solution("bbbbaaaaabbbb"));
}
}
후기 (40min)
처음에는 aba aabaa 같은 홀수의 경우만 생각해서 풀어서 절반만 맞았다.. 이후에 aa나 abba 같은 짝수의 개수를 푸는 법을 생각해내서 풀었고 조금 더럽게 푼거같…다..