문제
https://school.programmers.co.kr/learn/courses/30/lessons/12904?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 개요
주어진 문자열 s에서 부분 문자열 중 가장 긴 팰린드롬(앞뒤가 똑같은 문자열)의 길이를 찾아 반환하는 문제
팰린드롬이란?
팰린드롬(Palindrome)은 앞뒤를 뒤집어도 동일한 문자열을 의미한다. 예를 들어, "abcdcba"와 같은 문자열은 팰린드롬이며, "abcba", "aa", "a"도 팰린드롬에 해당
풀이
- 문자열의 각 위치를 중심으로, 양쪽으로 확장하면서 팰린드롬이 되는 부분 문자열을 찾는다
- 팰린드롬의 길이를 확인할 때, 두 가지 경우를 고려해야 합니다
- 중심이 하나인 경우 (홀수 길이의 팰린드롬): 예를 들어 "aba".
- 중심이 두 개인 경우 (짝수 길이의 팰린드롬): 예를 들어 "abba".
각 위치에서 팰린드롬을 확장하는 과정을 반복하여 가장 긴 팰린드롬의 길이를 찾는다
import java.util.*;
class Solution{
public int solution(String s){
int answer = 0;
for(int i=0; i<s.length(); i++) {
answer = Math.max(answer, palindrome(s, i, i));
answer = Math.max(answer, palindrome(s, i, i+1));
}
return answer;
}
public int palindrome(String s, int left, int right) {
while (true) {
if(left<0 || right>=s.length()) break;
if(s.charAt(left) == s.charAt(right)) {
left--;
right++;
} else {
break;
}
}
return right - left - 1;
}
}
'문제 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] [PCCP 기출문제] 2번 / 퍼즐 게임 챌린지 - Java (0) | 2024.09.14 |
---|---|
[프로그래머스] 두 원 사이의 정수 쌍 - Java (0) | 2024.09.10 |
[프로그래머스] 연속 펄스 부분 수열의 합 - Java (1) | 2024.09.09 |
[프로그래머스] 호텔 방 배정 - Java (0) | 2024.09.03 |
[프로그래머스] N으로 표현 - Java (0) | 2024.09.02 |