Leetcode Java Verifying an Alien Dictionary
업데이트:
문제
코드
class Solution {
private int[] point = new int[26];
public boolean isAlienSorted(String[] words, String order) {
for (int i = 0; i < order.length(); i++) {
this.point[order.charAt(i) - 'a'] = i;
}
for (int i = 1; i < words.length; i++) {
if (this.compare(words[i - 1], words[i])) {
return false;
}
}
return true;
}
private boolean compare(String s1, String s2) {
int s1Lenth = s1.length();
int s2Lenth = s2.length();
for (int i = 0; i < s1Lenth && i < s2Lenth; i++) {
if (s1.charAt(i) != s2.charAt(i)) {
return this.point[s1.charAt(i) - 'a'] > this.point[s2.charAt(i) - 'a'];
}
}
return s1Lenth > s2Lenth;
}
}
결과
설명
-
words의 붙어있는 두 문자열의 문자들이 order에 해당하는 사전 정렬 순으로 되어 있는지 검증하는 문제이다.
-
전역 변수인 point는 order의 각 문자열 순서를 저장하기 위한 변수로, order의 모든 문자들을 반복하여 각 문자의 순서를 넣어준다.
- 1부터 words의 길이 미만까지 i를 증가시키면서 아래를 반복한다.
- 4번에서 정의한 compare(String s1, String s2) 메서드에 words의 $i - 1$번째 문자와 i번째 문자의 결과가 true이면, 두 문자열의 오름차순 정렬이 아니므로 false를 주어진 문제의 결과로 반환한다.
- 두 문자열의 비교를 위한 compare(String s1, String s2) 메서드를 정의한다.
- s1Length와 s2Length는 s1과 s2의 문자열 길이를 저장한 변수이다.
- 0부터 s1Length와 s2Length 미만일 때 까지 i를 증가시키며 아래를 반복한다.
- s1과 s2의 i번째 문자의 값이 다른 경우 s1의 i번째 문자가 s2의 i번째 문자보다 order 내 순서가 뒤에 위치하는지 결과를 반환한다.
- 반복이 완료되면 s1의 길이가 s2의 길이보다 긴지 검증한 결과를 반환한다.
- 반복이 완료되면 주어진 조건을 만족하므로 true를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기