字符流匹配后缀。采用Java解题,定义了一个字典树包含布尔类型isend用以确定字符后缀存在状态、一个字典树数组储存字符后缀,如as则存入s,sbs则有[bs,s]。同时定义了力扣提供的两个方法。自定义私有方法insertReverse用于字符后缀录入到数组中。
``class StreamChecker { //字典树,将words中每个字符串反向添加到字典树中 //然后用一个list保存接收的字符 Node root=new Node(); List list=new ArrayList <>(); public StreamChecker(String[] words) { for(String word:words){ insertReverse(word); //有单词则反向插入 } }
public boolean query(char letter) {
list.add(letter);
Node node=root;
for(int i=list.size()-1;i>=0;i--){ //从后往前判断
int index=list.get(i)-'a';
if(node.children[index]==null)return false;
else if(node.children[index].isEnd)return true;
node=node.children[index];
}
return node.isEnd;
}
private void insertReverse(String word){ //反向添加字符串
Node node=root;
char[] cs=word.toCharArray();
for(int i=cs.length-1;i>=0;i--){
int index=cs[i]-'a'; //建立字符串索引
if(node.children[index]==null)node.children[index]=new Node();
node=node.children[index];
}
node.isEnd=true;}
} class Node{ boolean isEnd; Node[] children=new Node[26]; }``