Leetcode Java Stream of Characters
업데이트:
문제
코드
class StreamChecker {
private TrieNode root;
private StringBuilder sb;
public StreamChecker(String[] words) {
this.root = new TrieNode();
this.sb = new StringBuilder();
for (String word : words) {
TrieNode node = this.root;
char[] charArray = word.toCharArray();
int length = charArray.length;
for (int i = length - 1; i >= 0; i--) {
int index = charArray[i] - 'a';
if (node.children[index] == null) {
node.children[index] = new TrieNode();
}
node = node.children[index];
}
node.isWord = true;
}
}
public boolean query(char letter) {
this.sb.append(letter);
TrieNode node = this.root;
for (int i = this.sb.length() - 1; i >= 0 && node != null; i--) {
node = node.children[this.sb.charAt(i) - 'a'];
if (node != null && node.isWord) {
return true;
}
}
return false;
}
}
public class TrieNode {
public boolean isWord;
public TrieNode[] children;
public TrieNode() {
this.children = new TrieNode[26];
}
}
/**
* Your StreamChecker object will be instantiated and called as such:
* StreamChecker obj = new StreamChecker(words);
* boolean param_1 = obj.query(letter);
*/
결과
설명
- words로 초기화된 문자 스트림에서 순차적으로 문자를 이어줄 때, 접미사가 words 내 존재하는지 검증하는 문제이다.
- 생성자인 StreamChecker(String[] words)는 words를 이용하여 객체를 초기화하는 역할을 수행한다.
- 메서드인 query(char letter)는 letter를 문자열로 계속 이어주고, 접미사가 words 내 존재하는지 여부를 반환한다.
- 문제 풀이에 필요한 전역 변수를 정의한다.
- root는 문자를 Trie를 활용하여 저장할 변수이다.
- sb는 query 메서드를 통해 입력된 문자를 순차적으로 이어줄 변수이다.
- 생성자인 StreamChecker(String[] words)를 정의한다.
- root에 아래의 값을 가진 TrieNode를 초기화하여 넣어준다.
- isWord는 현재 위치까지 문자로 존재하는지 여부를 나타내기 위한 값을 저장하는 변수이다.
- children은 현재 문자 이후에 나타날 문자를 새 TrieNode로 이어줄 변수로, 영문자의 갯수인 26 크기로 초기화 하여 넣어준다.
- sb는 동적 문자열의 생성을 위해 StringBuilder로 초기화한다.
- words를 반복하여 root의 children에 각 문자열의 역순으로 TrieNode를 이어서 넣어주면서, 시작되는 문자 위치에 isWord를 true로 해당 문자열이 존재하는 것을 체크해준다.
- root에 아래의 값을 가진 TrieNode를 초기화하여 넣어준다.
- 메서드인 query(char letter)를 정의한다.
- sb에 letter를 이어준 후, node에 root를 넣어준다.
- sb의 마지막 위치부터 처음이면서, node가 null이 아닐 때 까지 i를 감소시키며 아래를 반복한다.
- node에 node의 children 중 sb의 i번째 문자 순서의 TrieNode를 넣어준다.
- node가 null이 아니면서 isWord인 초기에 주입된 words에 포함된 단어인 경우, true를 반환한다.
- 반복이 완료되면 sb의 접미사가 words 내 존재하지 않으므로, false를 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기