温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java实现基于Trie树结构的回文前缀树

发布时间:2024-11-12 09:23:48 来源:亿速云 阅读:81 作者:小樊 栏目:编程语言

Trie树(也称为前缀树)是一种用于存储字符串的树形结构

import java.util.HashMap;
import java.util.Map;

class TrieNode {
    Map<Character, TrieNode> children;
    boolean isEndOfWord;

    public TrieNode() {
        children = new HashMap<>();
        isEndOfWord = false;
    }
}

public class PalindromeTrie {
    private TrieNode root;

    public PalindromeTrie() {
        root = new TrieNode();
    }

    // 插入一个字符串到回文前缀树中
    public void insert(String word) {
        TrieNode current = root;
        for (char ch : word.toCharArray()) {
            current.children.putIfAbsent(ch, new TrieNode());
            current = current.children.get(ch);
        }
        current.isEndOfWord = true;
    }

    // 检查回文前缀树中是否存在某个字符串
    public boolean search(String word) {
        TrieNode current = root;
        for (char ch : word.toCharArray()) {
            if (!current.children.containsKey(ch)) {
                return false;
            }
            current = current.children.get(ch);
        }
        return current.isEndOfWord;
    }

    // 检查回文前缀树中是否存在某个字符串的前缀
    public boolean startsWith(String prefix) {
        TrieNode current = root;
        for (char ch : prefix.toCharArray()) {
            if (!current.children.containsKey(ch)) {
                return false;
            }
            current = current.children.get(ch);
        }
        return true;
    }

    public static void main(String[] args) {
        PalindromeTrie trie = new PalindromeTrie();
        trie.insert("madam");
        trie.insert("hello");
        trie.insert("world");

        System.out.println(trie.search("madam")); // 输出: true
        System.out.println(trie.search("hello")); // 输出: true
        System.out.println(trie.search("world")); // 输出: true
        System.out.println(trie.search("hell")); // 输出: false

        System.out.println(trie.startsWith("mad")); // 输出: true
        System.out.println(trie.startsWith("hel")); // 输出: true
        System.out.println(trie.startsWith("wor")); // 输出: true
        System.out.println(trie.startsWith("worl")); // 输出: false
    }
}

这个实现中,我们定义了一个TrieNode类来表示回文前缀树的节点,每个节点包含一个字符到子节点的映射(children)和一个布尔值(isEndOfWord),表示该节点是否是一个字符串的结尾。

PalindromeTrie类包含一个根节点(root),以及插入、搜索和前缀检查的方法。插入方法将一个字符串的每个字符按顺序插入到回文前缀树中;搜索方法检查回文前缀树中是否存在某个字符串;前缀检查方法检查回文前缀树中是否存在某个字符串的前缀。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI