Untitled

mail@pastecode.io avatar
unknown
plain_text
5 months ago
2.4 kB
2
Indexable
class Trie {
    static final int MAX_NODE = 350000;
    
    class Node {
        int cnt;
        int[] child;
        
        Node() {
            cnt = 0;
            child = new int[26];  // Mỗi phần tử đại diện cho một chữ cái
            for (int i = 0; i < 26; ++i) {
                child[i] = -1;
            }
        }
    }
    
    Node[] nodes = new Node[MAX_NODE];
    int nodeNum;

    public Trie() {
        init();
    }
    
    int newNode() {
        nodes[nodeNum] = new Node();
        return nodeNum++;
    }
    
    int calc(String str, int id, int command) {
        int count = 0;
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c == '?') {
                for (int j = 0; j < 26; ++j) {
                    if (nodes[id].child[j] != -1) {
                        count += calc(str.substring(i + 1), nodes[id].child[j], command);
                    }
                }
                return count;
            } else if (nodes[id].child[c - 'a'] == -1) {
                return count;
            } else {
                id = nodes[id].child[c - 'a'];
            }
        }
        count += nodes[id].cnt;
        nodes[id].cnt *= command;
        return count;
    }
    
    void init() {
        nodeNum = 0;
        newNode();
    }
    
    int add(String str) {
        int id = 0;
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (nodes[id].child[c - 'a'] == -1) {
                nodes[id].child[c - 'a'] = newNode();
            }
            id = nodes[id].child[c - 'a'];
        }
        return ++nodes[id].cnt;
    }
    
    int remove(String str) {
        return calc(str, 0, 0);
    }
    
    int search(String str) {
        return calc(str, 0, 1);
    }
}

public class Main {
    public static void main(String[] args) {
        Trie trie = new Trie();
        
        // Thêm từ vào Trie
        System.out.println(trie.add("apple"));  // Kết quả: 1
        System.out.println(trie.add("apple"));  // Kết quả: 2
        System.out.println(trie.add("app"));    // Kết quả: 1
        
        // Tìm kiếm từ
        System.out.println(trie.search("app")); // Kết quả: 1
        
        // Xóa từ khỏi Trie
        System.out.println(trie.remove("apple")); // Kết quả: 2
    }
}
Leave a Comment