Leetcode Java Palindrome Partitioning
업데이트:
문제
코드
class Solution {
public List<List<String>> partition(String s) {
List<List<String>> result = new ArrayList<>();
this.recursive(s, 0, result, new ArrayList<>());
return result;
}
private void recursive(String s, int index, List<List<String>> result, List<String> temp) {
if (index == s.length()) {
result.add(new ArrayList<>(temp));
} else {
for (int i = index; i < s.length(); i++) {
if (this.isPalindrome(s, index, i)) {
temp.add(s.substring(index, i + 1));
this.recursive(s, i + 1, result, temp);
temp.remove(temp.size() - 1);
}
}
}
}
private boolean isPalindrome(String s, int start, int end) {
while (start < end) {
if (s.charAt(start++) != s.charAt(end--)) {
return false;
}
}
return true;
}
}
결과
설명
-
주어진 문자열 s를 이용하여 앞뒤로 읽어도 같은 문자열(이하 회문)을 모두 찾는 문제이다.
-
재귀 호출을 이용하여 List인 result에 회문의 조합을 확인하여 넣어준다.
-
index가 s.length()와 동일한 경우 마지막 문자열까지 탐색한 경우이므로, result에 회문을 저장한 temp를 새 객체로 생성하여 넣어준다.
- 그 외의 경우 index부터 s.length()까지 반복하여 문자열 s의 index부터 i까지의 부분 문자열이 회문인 경우 아래를 수행한다.
- 반복을 통한 회문을 저장하는 변수 temp에 해당 문자열을 넣어준다.
- index를 $i + 1$로 변경하고 재귀 호출을 수행하여 문자열 s의 회문을 탐색한다.
- 위의 재귀 호출이 완료되면 해당 문자열 중 마지막 입력된 문자열을 제거하고 다시 반복문을 수행한다.
- 재귀 호출이 완료되면 주어진 문자열 s의 회문 조합을 저장한 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기