最長迴圈子串 C語言

2021-10-04 00:21:52 字數 1253 閱讀 8147

description:編寫程式求給出的字串中的最長迴圈子串。

input:

agbhkddkhbtr

output:

bhkddkhb

方法1: 中心擴充套件法

演算法思想: 從左到右將每乙個字元當作回文串的中心,進行擴充套件,以此找到最長的回文串。

時間複雜度: 擴充套件後的字串長度為(2 * n + 1), 對每乙個字元擴充套件,故複雜度為o(n^2)

#include

#include

#include

#define maxn 1010

char str[maxn]

;char s[maxn]

;int st , maxlen;

//st是最長回文子串的中心,maxlen是其長度

// 由於字串奇數偶數有不同的處理,為了簡便,將原字串擴充套件,即在每個字元

//前加入乙個'#',同時最後乙個字元後加乙個'#',這樣字串長度都變為奇數。

//例如: abababa -------> #a#b#a#b#a#b#a#

void

getstring

(char str)

}void

getmaxpalindrome

(char str)

if(plen > maxlen)}}

intmain()

方法2:manacher演算法

關於manacher演算法具體介紹可以參考一些其它部落格。

時間複雜度: o(n)

#include

#include

#include

#include

#define maxn 1010

char s[maxn]

;int parr[maxn]

, st , maxlen;

void

getstring

(char str)

intmin

(int a ,

int b)

void

manacher

(char str)

if(i + parr[i]

> r)

if(parr[i]-1

> maxlen)}}

intmain()

poj 2046 迴圈子串問題

題目 poj 2046 這個題目有個結論 若s存在迴圈子串,當且僅當,len可以被len prefix len 1 整除。連線次數為len len prefix len 1 充分性我不會證明,我就證明下必要性吧。不放假設s pattern n len strlen s 顯然prefix len 1 ...

C語言 最長回文子串

描述 輸入乙個字串,求其中最長回文子串。子串的含義是 在字串中連續出現得字串片段。回文的含義是,正著看和倒著看是相同的,如abba何abbebba。在判斷時要求忽略所有的標點和空格,且忽略大小寫。但輸出時按原樣輸出 首尾不要輸出多餘的字串 輸入字串長度大於等於1小於等於5000.且單獨佔一行。輸入 ...

C語言 最長回文字串

馬拉車演算法現在僅僅是看懂,以後會回來填坑。動態規劃的本質就是求表 但是遞推式很難求 這裡設定乙個二維陣列jud 10 10 有jud i j jud 1 8 的意義是判斷位置1的字元到位置8的字元形成的字串是否為回文字串 所以必有ij的部分全部設定為0。true為1,false為0 判斷是否為回文...