Leetcode Java Unique Substrings in Wraparound String
업데이트:
문제
코드
class Solution {
public int findSubstringInWraproundString(String p) {
char[] charArray = p.toCharArray();
int[] max = new int[26];
max[charArray[0] - 'a'] = 1;
int sum = 1;
int length = 1;
for (int idx = 1; idx < p.length(); idx++) {
int diff = charArray[idx] - charArray[idx - 1];
if (diff == 1 || diff == -25) {
length++;
} else {
length = 1;
}
int index = charArray[idx] - 'a';
if (length > max[index]) {
sum += length - max[index];
max[index] = length;
}
}
return sum;
}
}
결과
설명
- 문자열 s에 존재하는 문자열 p의 고유한 하위 부분 문자열의 수를 구하는 문제이다.
- 문자열 s는 “…zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd…“처럼 알파벳 소문자인 “abcdefghijklmnopqrstuvwxyz”가 이어져 있는 문자열이다.
- 문제 풀이에 필요한 변수를 정의한다.
- charArray는 p를 문자의 배열로 보관할 변수로, p를 문자의 배열로 변환하여 넣어준다.
- max는 charArray의 문자 별 최대 고유 하위 문자열의 길이를 저장할 변수로, 영문자의 개수인 26 크기로 초기화하고 charArray의 첫 번째 문자에 ‘a’를 뺀 위치에 1을 넣어준다.
- sum은 고유한 하위 문자열의 수를 계산할 변수로, 첫 번째 문자가 위에서 포함되었으므로 1로 초기화한다.
- length는 고유한 하위 문자열의 길이를 저장할 변수로, sum과 동일한 이유로 1로 초기화한다.
- 1부터 p의 길이 전까지 idx를 증가시키며 아래를 반복 수행한다.
- charArray의 idx번째 값과 $idx -1$번째 값의 차이가 1이거나 -25인 경우, length를 증가시킨다.
- 위의 경우가 아니라면 length를 1로 초기화 시킨다.
- index에 charArray의 idx번째 값에 ‘a’를 뺀 값을 넣어준다.
- length가 max의 index번째 값보다 큰 경우, sum에 $length - max[index]$ 값을 더해주고 max의 index번째 위치에 length를 넣어준다.
- 반복이 완료되면 고유한 하위 부분 문자열의 수인 sum을 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기