Leetcode Java Maximum Length of a Concatenated String with Unique Characters
업데이트:
문제
코드
class Solution {
private int result;
public int maxLength(List<String> arr) {
this.result = 0;
this.dfs(arr, "", 0);
return this.result;
}
private void dfs(List<String> arr, String s, int index) {
boolean isUnique = this.validate(s);
if (isUnique) {
this.result = Math.max(this.result, s.length());
}
if (index == arr.size() || !isUnique) {
return;
}
for (int i = index; i < arr.size(); i++) {
this.dfs(arr, s + arr.get(i), i + 1);
}
}
private boolean validate(String s) {
Set<Character> set = new HashSet<>();
for (char c : s.toCharArray()) {
if (set.contains(c)) {
return false;
}
set.add(c);
}
return true;
}
}
결과
설명
-
arr의 각 요소들을 순차적으로 이어서 고유 문자들로만 이루어진 문자열을 만들 때, 가능한 최대 길이를 구하는 문제이다.
-
result는 가능한 최대 길이를 저장할 전역 변수이다.
-
result를 0으로 초기화하고 4번에서 정의한 dfs(List
arr, String s, int index) 메서드에 ""과 0을 같이 넣어 수행한다. - DFS 방식으로 탐색할 dfs(List
arr, String s, int index) 메서드를 정의한다. - isUnique는 s의 문자열이 고유한 문자들로 이루어졌는지 검증한 변수로, validate(String s) 메서드를 수행하여 검증한 결과를 넣어준다.
- isUnique가 true인 고유 문자들로 구성되어 있다면, result에 result와 s의 길이 중 큰 값인 길이를 넣어준다.
- index가 arr의 길이와 동일하거나 isUnique가 false인 고유 문자열이 아닌 경우, 수행을 중단한다.
- index부터 arr의 길이까지 i를 증가시키며 s에 s와 arr의 i번째 문자를 이어주고, index에 $i + 1$을 넣어 재귀 호출을 순차적으로 수행한다.
- 4번의 수행이 완료되면 최대 길이가 저장된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기