zoukankan      html  css  js  c++  java
  • Trie树的插入,查前缀,查单词,删前缀和删单词。

    这个Trie原先用C++就敲得很熟了,看了蓝桥杯的视频后学会把一个功能这样封装起来,以后用的时候就很爽可以直接调用了,所以就用Java写了;

    public class Trie {
        private final int SIZE = 26;
        private final int HEAD = 'a';
        private int cnt;
        private int tail;
        private Trie[] next = new Trie[SIZE];
        void insert(String s) {
            Trie now = this;
            for (int i = 0; i < s.length(); i++) {
                int id = s.charAt(i) - HEAD;
                if (now.next[id] == null) {
                    now.next[id] = new Trie();
                }
                now = now.next[id];
                now.cnt++;
            }
            now.tail++;
        }
        int queryPrefix(String s) {
            Trie now = this;
            for (int i = 0; i < s.length(); i++) {
                int id = s.charAt(i) - HEAD;
                if (now.next[id] == null) {
                    return 0;
                }
                now = now.next[id];
            }
            return now.cnt;
        }
        int queryWord(String s) {
            Trie now = this;
            for (int i = 0; i < s.length(); i++) {
                int id = s.charAt(i) - HEAD;
                if (now.next[id] == null) {
                    return 0;
                }
                now = now.next[id];
            }
            return now.tail;
        }
        void deletePrefix(String s) {
            int sum = queryPrefix(s);
            if (sum == 0) {
                return;
            }
            Trie now = this;
            for (int i = 0; i < s.length(); i++) {
                int id = s.charAt(i) - HEAD;
                now.next[id].cnt -= sum;
                if (now.next[id].cnt == 0) {
                    now.next[id] = null;
                    return;
                }
            }
        }
        void deleteWord(String s) {
            int sum = queryWord(s);
            if (sum == 0) {
                return;
            }
            Trie now = this;
            for (int i = 0; i < s.length(); i++) {
                int id = s.charAt(i) - HEAD;
                now.next[id].cnt -= sum;
                if (now.next[id].cnt == 0) {
                    now.next[id] = null;
                    return;
                }
            }
            now.tail -= sum;
        }
    }
  • 相关阅读:
    标题:CSS-button添加display:block;属性后自动换行!
    JS-遍历对象
    JS-获取对象的长度大小
    HTML-span和div区别
    SQL-Foreach标签
    JS_Select_option切换自动触发事件
    JS_Select赋值的几种方式
    加密系统文件夹
    JS-返回上一页
    metronic 4.5.7开发环境下, 在Windows 10上安装了10.16.0版本的node js之后,导致node sass无法加载
  • 原文地址:https://www.cnblogs.com/Angel-Demon/p/10243668.html
Copyright © 2011-2022 走看看