溫馨提示×

溫馨提示×

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

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

Java實現(xiàn)基于Boyer-Moore算法的回文串搜索

發(fā)布時間:2024-11-11 18:25:43 來源:億速云 閱讀:79 作者:小樊 欄目:編程語言

Boyer-Moore算法是一種高效的字符串搜索算法,它通過預(yù)處理模式串來跳過一些不必要的比較

public class BoyerMoorePalindromeSearch {

    public static void main(String[] args) {
        String text = "abccbaabc";
        String pattern = "abc";
        int index = search(text, pattern);
        if (index != -1) {
            System.out.println("Pattern found at index: " + index);
        } else {
            System.out.println("Pattern not found");
        }
    }

    public static int search(String text, String pattern) {
        if (text == null || pattern == null || text.length() < pattern.length()) {
            return -1;
        }

        // 預(yù)處理模式串
        int[] badCharacterShift = new int[256];
        preprocess(pattern, badCharacterShift);

        int i = 0; // text的索引
        int j = pattern.length() - 1; // pattern的索引

        while (i <= text.length() - pattern.length()) {
            if (pattern.charAt(j) == text.charAt(i)) {
                if (j == 0) {
                    return i; // 匹配成功
                }
                i++;
                j--;
            } else {
                int shift = badCharacterShift[text.charAt(i)];
                if (shift == 0) {
                    shift = pattern.length() - j;
                }
                i += Math.max(1, shift); // 跳過不需要比較的字符
                j = pattern.length() - 1;
            }
        }

        return -1; // 匹配失敗
    }

    private static void preprocess(String pattern, int[] badCharacterShift) {
        int m = pattern.length();
        for (int i = 0; i < m; i++) {
            badCharacterShift[pattern.charAt(i)] = m - i;
        }
    }
}

這個程序首先定義了一個search方法,該方法接受兩個字符串參數(shù):textpatternpreprocess方法用于預(yù)處理模式串,計算每個字符在模式串中最后出現(xiàn)的位置。在search方法中,我們使用雙指針技術(shù)從textpattern的開頭開始比較字符。如果字符匹配,我們將指針向前移動;否則,我們根據(jù)badCharacterShift數(shù)組跳過一些不需要比較的字符。如果在text中找到了pattern,則返回其起始索引;否則,返回-1。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI