Java实现基于字典树的回文串检测

发布时间:2024-11-11 17:23:45 作者:小樊
来源:亿速云 阅读:78

在Java中,我们可以使用字典树(Trie)数据结构来实现基于字典树的回文串检测

class TrieNode {
    TrieNode[] children = new TrieNode[26];
    boolean isEndOfWord = false;
}

public class PalindromeChecker {
    private TrieNode root;

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

    public void insert(String word) {
        TrieNode node = root;
        for (char c : word.toCharArray()) {
            int index = c - 'a';
            if (node.children[index] == null) {
                node.children[index] = new TrieNode();
            }
            node = node.children[index];
        }
        node.isEndOfWord = true;
    }

    public boolean isPalindrome(String word) {
        TrieNode node = search(word);
        return isPalindromeHelper(node, 0, word.length() - 1);
    }

    private TrieNode search(String word) {
        TrieNode node = root;
        for (char c : word.toCharArray()) {
            int index = c - 'a';
            if (node.children[index] == null) {
                return null;
            }
            node = node.children[index];
        }
        return node;
    }

    private boolean isPalindromeHelper(TrieNode node, int start, int end) {
        if (start >= end) {
            return true;
        }
        if (node.isEndOfWord) {
            return isPalindromeHelper(root, start + 1, end - 1);
        }
        if (node.children[0] != null && node.children[0].isEndOfWord) {
            return isPalindromeHelper(node.children[0], start, end - 1);
        }
        if (node.children[1] != null && node.children[1].isEndOfWord) {
            return isPalindromeHelper(node.children[1], start + 1, end);
        }
        return false;
    }

    public static void main(String[] args) {
        PalindromeChecker checker = new PalindromeChecker();
        checker.insert("ababa");
        System.out.println(checker.isPalindrome("ababa")); // 输出: true
        System.out.println(checker.isPalindrome("abcba")); // 输出: true
        System.out.println(checker.isPalindrome("hello")); // 输出: false
    }
}

在这个实现中,我们首先创建了一个TrieNode类来表示字典树的节点。然后,我们创建了一个PalindromeChecker类,其中包含一个字典树的根节点以及插入和检测回文串的方法。

insert方法用于将单词插入字典树。isPalindrome方法首先使用search方法找到给定单词的最后一个字符对应的节点,然后调用isPalindromeHelper方法递归地检查从两端到中间的所有字符是否形成回文串。

isPalindromeHelper方法是一个递归方法,它检查从给定节点开始的两端字符是否形成回文串。如果遇到以元音结尾的单词,它会跳过该元音字符。如果所有字符都形成回文串,则返回true,否则返回false。

推荐阅读:
  1. Java秋招面试题有哪些
  2. Java Spring Boot框架面试题有哪些

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

java

上一篇:Java中如何检测循环回文串

下一篇:Java中如何检测包含重复字符的回文串

相关阅读

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

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