Leetcode Java Find Words That Can Be Formed by Characters
업데이트:
문제
코드
class Solution {
public int countCharacters(String[] words, String chars) {
int[] count = new int[26];
for (char c : chars.toCharArray()) {
count[c - 'a']++;
}
int result = 0;
for (String word : words) {
if (this.canBeFormed(count, word)) {
result += word.length();
}
}
return result;
}
private boolean canBeFormed(int[] count, String word) {
int[] temp = new int[26];
for (char c : word.toCharArray()) {
int num = c - 'a';
temp[num]++;
if (temp[num] > count[num]) {
return false;
}
}
return true;
}
}
결과
설명
-
words 내 단어들 중 chars의 문자들로 구성할 수 있는 단어의 총 길이을 구하는 문제이다.
- 문제 풀이에 필요한 변수를 정의한다.
- count는 chars의 단어의 갯수를 너헝줄 변수로, 26 크기의 정수 배열로 초기화 후 chars의 각 문자를 이용하여 count에 문자의 갯수를 넣어준다.
- result는 총 길이를 구하기 위한 변수로, 0으로 초기화한다.
- words를 순차적으로 word에 넣어 아래를 반복한다.
- 4번에서 정의한 canBeFormed(int[] count, String word) 메서드를 수행한 결과가 true이 ㄴ경우, result에 word의 길이를 넣어준다.
- 단어를 구성할 수 있는지 검증하기위한 canBeFormed(int[] count, String word) 메서드를 정의한다.
- temp는 word의 영문자 갯수를 구하기 위한 변수로, 동일하게 26 크기의 정수 배열로 초기화한다.
- word의 각 단어를 순차적으로 c에 넣어 아래를 반복한다.
- num에 c를 ‘a’로 뺀 영문자 위치를 저장하고, temp[num]의 값을 증가시킨다.
- temp[num]의 값이 count[num]보다 커지게 되면, 만들 수 없으므로 false를 반환한다.
- 반복이 완료되면 true를 반환한다.
- 반복이 완료되면 총 단어의 길이가 저장된 result를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기