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

溫馨提示×

溫馨提示×

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

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

C語言字符串中的Manacher算法

發布時間:2024-08-30 09:53:47 來源:億速云 閱讀:81 作者:小樊 欄目:編程語言

Manacher算法是一種用于查找字符串中最長回文子串的線性時間復雜度算法。它的基本思想是利用已經計算出的回文子串的信息,避免重復計算。Manacher算法的時間復雜度為O(n),其中n為字符串的長度。

以下是Manacher算法的實現:

#include<stdio.h>
#include<string.h>

void Manacher(char *str, int *P) {
    int n = strlen(str);
    int center = 0; // 回文中心
    int maxRight = 0; // 回文右邊界
    int maxLen = 0; // 最長回文子串長度
    int maxCenter = 0; // 最長回文子串中心

    for (int i = 0; i < n; ++i) {
        if (i < maxRight) {
            int mirror = 2 * center - i; // 鏡像位置
            P[i] = min(maxRight - i, P[mirror]);
        } else {
            P[i] = 1;
        }

        while (i - P[i] >= 0 && i + P[i] < n && str[i - P[i]] == str[i + P[i]]) {
            ++P[i];
        }

        if (i + P[i] > maxRight) {
            center = i;
            maxRight = i + P[i];
        }

        if (P[i] > maxLen) {
            maxLen = P[i];
            maxCenter = i;
        }
    }
}

int main() {
    char str[] = "babad";
    int n = strlen(str);
    int P[n];

    Manacher(str, P);

    for (int i = 0; i < n; ++i) {
        printf("%d ", P[i]);
    }
    printf("\n");

    return 0;
}

在這個例子中,我們首先定義了一個名為Manacher的函數,它接受一個字符串指針str和一個整數數組指針P作為參數。P數組用于存儲以每個字符為中心的最長回文子串的半徑(包括中心字符)。

Manacher函數中,我們首先初始化了一些變量,如回文中心、回文右邊界、最長回文子串長度和最長回文子串中心。然后,我們遍歷字符串中的每個字符,根據已知的回文子串信息計算以當前字符為中心的最長回文子串的半徑,并更新相關變量。

main函數中,我們調用Manacher函數,并打印出P數組的內容。這個數組表示了以每個字符為中心的最長回文子串的半徑。

向AI問一下細節

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

AI

万载县| 梁山县| 松原市| 彰化县| 海城市| 石家庄市| 宜兰市| 城市| 增城市| 长武县| 武陟县| 沽源县| 余干县| 凤山市| 方正县| 项城市| 建水县| 清水河县| 玉林市| 彭阳县| 武川县| 博兴县| 商水县| 阜南县| 杭州市| 巨野县| 哈尔滨市| 临海市| 五常市| 清河县| 彩票| 黔南| 平南县| 东台市| 库尔勒市| 平昌县| 郯城县| 琼结县| 聊城市| 都江堰市| 原阳县|