Leetcode Java Word Break II
업데이트:
문제
코드
class Solution {
public List<String> wordBreak(String s, List<String> wordDict) {
return this.recursive(s, wordDict, new HashMap<>());
}
private List<String> recursive(String s, List<String> wordDict, Map<String, List<String>> map) {
if (map.containsKey(s)) {
return map.get(s);
} else {
List<String> result = new ArrayList<>();
for (String word : wordDict) {
if (s.startsWith(word)) {
String temp = s.substring(word.length());
if (temp.length() == 0) {
result.add(word);
} else {
for (String sub : this.recursive(temp, wordDict, map)) {
result.add(String.join(" ", word, sub));
}
}
}
}
map.put(s, result);
return result;
}
}
}
결과
설명
-
주어진 List wordDict를 이용하여 문자열 s를 만들 수 있는 모든 경우의 수를 찾는 문제이다.
-
재귀 호출을 이용하여 map에 문자열을 저장하고, wordDict를 이용하여 문자열 s를 만들 수 있는 모든 경우의 수를 찾아 주어진 문제의 결과로 반환한다.
- 문제의 결과를 저장하기 위한 변수 result를 정의한다.
- map에 문자열 s가 존재하는 경우 저장한 문자열을 가져와 반환한다.
- map에 문자열 s가 존재하지 않는 경우 wordDict를 반복하여 아래의 문자열 검증을 수행한다.
- 문자열 s가 word로 시작되는 경우, 해당 문자열을 잘라 temp를 정의한다.
- temp의 길이가 0인 경우 result에 추가한다.
- temp의 길이가 0이 아닌 경우, 재귀 호출을 이용하여 문자열을 조합하여 result에 추가한다.
- map에 결과를 저장하여 문자열을 임시 보관하고 결과를 저장한 result를 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기