91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜昌市| 都安| 东台市| 达拉特旗| 湛江市| 巴林左旗| 琼中| 调兵山市| 铜梁县| 清流县| 娄烦县| 长丰县| 武宣县| 遵化市| 大连市| 铜鼓县| 辉县市| 青岛市| 平顶山市| 沂南县| 枣庄市| 三门县| 陆丰市| 栖霞市| 文水县| 新晃| 垦利县| 甘南县| 宁陕县| 福清市| 达尔| 临沧市| 益阳市| 格尔木市| 齐齐哈尔市| 孟连| 禹城市| 马山县| 司法| 平和县| 聊城市|