Leetcode Java Shortest Palindrome
업데이트:
문제
코드
class Solution {
public String shortestPalindrome(String s) {
int start = 0;
for (int end = s.length() - 1; end >= 0; end--) {
if (s.charAt(start) == s.charAt(end)) {
start++;
}
}
if (start == s.length()) {
return s;
}
String str = s.substring(start);
return new StringBuilder(str)
.reverse()
.append(this.shortestPalindrome(s.substring(0, start)))
.append(str)
.toString();
}
}
결과
설명
-
주어진 문자열 s를 이용하여 최소 크기의 회문(앞뒤로 동일한 문자열)을 만드는 문제이다.
- 지역 변수 start를 0으로 정의하고, 문자열 s를 마지막 자리부터 첫 자리까지 반복하여 회문이 되는 구간을 찾는다.
- s의 start번째 문자와 s의 end번째 문자가 동일하다면 start를 증가시켜 회문이 되는 문자열의 구간을 확인한다.
-
반복이 완료되고 start와 주어진 문자열 s의 길이가 동일한 경우, s가 회문이므로 s를 주어진 문제의 결과로 반환한다.
- 지역 변수 str을 주어진 문자열 s의 start 위치의 문자 부터 마지막 문자까지 잘라 넣어준다.
- 구해진 start 위치의 문자부터 마지막 문자는 회문이 되는 문자열을 제외한 문자로, 접두와 접미에 넣어줄 문자를 임시 보관한다.
- 새 StringBuilder를 정의하여 str과 재귀 호출을 이용하여 회문을 만들어 주어진 문제의 결과로 반환한다.
- 동적 문자열의 생성시, 효율적인 메모리 사용을 위해 StringBuilder를 사용한다.
- 빈 StringBuilder에 str을 넣고, 문자열의 앞뒤를 반전시켜준다.
- 회문을 만들기 위해 회문이 되는 구간을 제외한 나머지 문자열을 앞뒤로 넣어주기 위해서, 처음 들어가는 접두 부분은 반전시켜 넣어준다.
- 주어진 문자열 s의 첫 문자부터 start 위치의 문자까지 문자열을 이용하여 재귀 호출을 수행하고, 해당 결과를 위의 문자열에 이어준다.
- 재귀 호출을 통해 회문이 되는 문자열을 검증하여 문자열을 이어주기 위함이다.
- 마지막으로 다시 str을 넣고, 문자열로 변경하여 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기