您好,登錄后才能下訂單哦!
在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。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。