Leetcode Java Longest Word in Dictionary
업데이트:
문제
코드
class Solution {
public String longestWord(String[] words) {
String result = "";
Set<String> set = new HashSet<>();
for (String word : words) {
set.add(word);
}
for (String word : words) {
int wordLength = word.length();
int longestLength = result.length();
if (wordLength > longestLength || (wordLength == longestLength && word.compareTo(result) < 0)) {
boolean isLongestWord = true;
for (int idx = 1; idx < wordLength; idx++) {
if (!set.contains(word.substring(0, idx))) {
isLongestWord = false;
break;
}
}
if (isLongestWord) {
result = word;
}
}
}
return result;
}
}
결과
설명
- words의 각 문자열들을 한 문자씩 사용하여 만들 수 있는 가장 긴 문자열의 길이인 문자열을 찾는 문제이다.
- 단어는 각 문자열의 한 문자씩 사용하여 왼쪽에서 오른쪽으로 이전까지 만들었던 문자열 끝에 앞의 문자를 붙이는 식으로 만들어야 한다.
- 둘 이상의 정답이 존재하는 경우, 사전순으로 긴 단어를 반환한다.
- 문제 풀이에 필요한 변수를 정의한다.
- result는 가장 긴 문자열을 넣을 변수로, 빈 값으로 초기화한다.
- set은 words 내 문자열들을 중복 제거하여 저장할 변수로, HashSet으로 초기화하여 words의 모든 문자열을 넣어준다.
- words의 모든 문자열을 word에 넣어 아래를 반복한다.
- wordLength에 word의 길이를, longestLength에 result의 길이를 넣어 초기화한다.
- wordLength가 longestLength보다 긴 경우이거나, 동일한 길이인 경우 word가 사전순 우선되는 단어인 경우 아래를 수행한다.
- word의 처음부터 한 문자씩 붙인 부분 문자열이 words에 포함되지 않는 경우, 조건에 해당하지 않으므로 isLongestWord를 false로 바꾸고 반복을 중지한다.
- isLongestWord가 true인 경우만 result에 word를 넣어준다.
- 반복이 완료되면 조건을 만족하는 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기