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

溫馨提示×

溫馨提示×

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

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

Java實現基于后綴樹的回文串子串查找

發布時間:2024-11-11 18:55:44 來源:億速云 閱讀:79 作者:小樊 欄目:編程語言

在Java中實現基于后綴樹的回文串子串查找,首先需要構建一個后綴樹,然后利用這個后綴樹來查找回文串

import java.util.*;

class SuffixTreeNode {
    int start, end;
    Map<Character, SuffixTreeNode> children;

    public SuffixTreeNode() {
        start = -1;
        end = -1;
        children = new HashMap<>();
    }
}

public class SuffixTree {
    private SuffixTreeNode root;
    private String text;

    public SuffixTree(String text) {
        this.text = text;
        buildSuffixTree();
    }

    private void buildSuffixTree() {
        int n = text.length();
        root = new SuffixTreeNode();
        for (int i = 0; i < n; i++) {
            insert(text.substring(i));
        }
    }

    private void insert(String suffix) {
        SuffixTreeNode node = root;
        for (char c : suffix.toCharArray()) {
            if (!node.children.containsKey(c)) {
                node.children.put(c, new SuffixTreeNode());
            }
            node = node.children.get(c);
        }
        node.end = suffix.length() - 1;
    }

    public List<Integer> searchPalindrome(String palindrome) {
        List<Integer> result = new ArrayList<>();
        for (int i = 0; i < text.length(); i++) {
            if (isPalindrome(text, i, i + palindrome.length() - 1)) {
                result.add(i - palindrome.length() + 1);
            }
        }
        return result;
    }

    private boolean isPalindrome(String text, int start, int end) {
        while (start < end) {
            if (text.charAt(start) != text.charAt(end)) {
                return false;
            }
            start++;
            end--;
        }
        return true;
    }

    public static void main(String[] args) {
        String text = "banana";
        SuffixTree suffixTree = new SuffixTree(text);
        String palindrome = "ana";
        List<Integer> result = suffixTree.searchPalindrome(palindrome);
        System.out.println("Palindrome found at positions: " + result);
    }
}

這個程序首先構建了一個后綴樹,然后通過searchPalindrome方法查找給定的回文串子串在文本中的所有位置。isPalindrome方法用于檢查一個字符串是否為回文串。

注意:這個實現僅適用于較短的文本,因為構建后綴樹的時間復雜度為O(n^2),其中n為文本長度。對于較長的文本,可以考慮使用更高效的算法,如Manacher算法。

向AI問一下細節

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

AI

咸宁市| 锦州市| 屯留县| 泸西县| 太仆寺旗| 古丈县| 临武县| 樟树市| 长兴县| 丰宁| 罗定市| 钟祥市| 屏东县| 鄢陵县| 乌兰察布市| 呼和浩特市| 宜宾县| 正镶白旗| 延津县| 曲靖市| 高陵县| 北票市| 章丘市| 资源县| 凤山县| 米泉市| 靖远县| 佛冈县| 会同县| 鲁山县| 阜阳市| 盐山县| 务川| 柳州市| 大田县| 铜山县| 开原市| 丁青县| 义马市| 哈尔滨市| 崇文区|