Leetcode Java Number of Matching Subsequences
업데이트:
문제
코드
class Solution {
public int numMatchingSubseq(String s, String[] words) {
Map<String, Integer> map = new HashMap<>();
for (String word : words) {
map.put(word, map.getOrDefault(word, 0) + 1);
}
int count = 0;
char[] sCharArray = s.toCharArray();
for (String word : map.keySet()) {
char[] wordCharArray = word.toCharArray();
int i = 0;
int j = 0;
while (i < sCharArray.length && j < wordCharArray.length) {
if (sCharArray[i] == wordCharArray[j]) {
j++;
}
i++;
}
if (j == wordCharArray.length) {
count += map.get(word);
}
}
return count;
}
}
결과
설명
- words 배열 내 s의 부분 수열의 개수를 구하는 문제이다.
- “abc”와 “ace”는 “abcde”의 부분 수열이다.
- 문제 풀이에 필요한 변수를 정의한다.
- map은 words 내 중복된 문자열의 개수를 저장할 변수로, words를 이용하여 문자별 발생 횟수를 값에 넣어준다.
- count는 words 배열 내 s의 부분 수열의 개수를 저장할 변수로, 0으로 초기화한다.
- sCharArray는 s를 문자 배열로 저장한 변수이다.
- map의 키 값들을 차례대로 word로 넣어 아래를 반복한다.
- 부분 수열 검증에 필요한 변수들을 정의한다.
- wordCharArray는 word를 문자 배열로 저장한 변수이다.
- i와 j는 s와 word의 각 문자 배열을 차례대로 검증할 변수로, 모두 0으로 초기화한다.
- i가 sCharArray의 길이 미만이고 j가 wordCharArray의 길이 미만일 때 까지 아래를 반복하여 수행한다.
- sCharArray의 i번째 문자와 wordCharARray의 j번째 문자가 동일한 경우, j를 다음 위치로 이동시킨다.
- i를 증가시켜 sCharArray의 다음 위치로 이동시켜준다.
- j가 wordCharArray의 길이와 동일한 경우, 부분 순열에 속하므로 count에 map의 word에 해당하는 개수를 더해준다.
- 부분 수열 검증에 필요한 변수들을 정의한다.
- 반복이 완료되면 words 배열 내 s의 부분 수열의 개수를 저장한 count를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기