Leetcode Java Longest String Chain
업데이트:
문제
코드
class Solution {
public int longestStrChain(String[] words) {
Map<String, Integer> map = new HashMap<>();
Arrays.sort(words, (a, b) -> a.length() - b.length());
int result = 0;
for (String word : words) {
int max = 0;
for (int i = 0; i < word.length(); i++) {
max = Math.max(max, map.getOrDefault(word.substring(0, i) + word.substring(i + 1), 0) + 1);
}
map.put(word, max);
result = Math.max(result, max);
}
return result;
}
}
결과
설명
-
words 내 한 단어씩 붙여서 다음 단어를 만들 수 있는 문자열의 가장 많은 연결 문자열 갯수를 구하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- map은 문자열 별 연결 횟수를 저장하기 위한 변수로, HashMap으로 초기화한다.
- result는 가장 많은 연결 문자열의 갯수를 저장할 변수로, 0으로 초기화한다.
-
words를 짧은 문자열순으로 정렬한다.
- words의 모든 문자열을 word에 넣고 아래를 반복한다.
- max는 word를 이용하여 가장 많은 연결 문자열의 갯수를 저장할 변수로, 0으로 초기화한다.
- 0부터 word의 길이 미만까지 i를 증가시키며 아래를 수행한다.
- max에 max와 map에서 word의 처음부터 i번째 자리까지 문자열과 $i + 1$번째부터 끝까지 문자열을 이어준 key의 값을 꺼내 1을 더한 값 중 큰 값을 넣어준다.
- map에 word와 max를 넣어 word까지 최대 연결 횟수를 저장한다.
- result에 result와 max 중 가장 큰 값을 넣어준다.
- 반복이 완료되면 가장 많은 연결 문자열의 갯수가 저장된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기