字符流匹配后缀

102 阅读1分钟

字符流匹配后缀。采用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]; }``