演算法競賽入門經典 3 3 最長回文子串

2021-08-26 19:33:01 字數 1861 閱讀 8032

//例題3-4

/* * 輸入乙個字串,求出其中最長的回文子串。子串的含義是:在原串中連續出現的字串片段。

*回文的含義是:正看著和倒看著相同,如abba和yyxyy。在判斷時,應該忽略所有標點符號和空格

*且忽略大小寫,但輸出應保持原樣(在回文串的首部和尾部不要輸出多餘字元)。輸入字元長度不超過5000

*且佔據單獨的一行。應該輸出最長回文串,如果有多個,輸出起始位置最靠左的。

*樣例輸入:confuciuss say:madam,i'm adam.

*樣例輸出:madam,i'm adam

*///程式3-5 最長回文子串(1)

#include#include#include//用到isalpha、touuper等工具

#define maxn 5000+10

char buf[maxn],s[maxn];

int main()

printf("max=%d\n",max);

return 0;

}//程式3-5 最長回文子串(2)

#include#include#include//用到isalpha、touuper等工具

#define maxn 5000+10

char buf[maxn],s[maxn];

int p[maxn]; //增設陣列p,用於儲存s[i]在buf中的位置

int main()

//儲存當前最長回文子串長度,記錄子串範圍

}for(j=0;i-j>=0 && i+j+1max)

}} for(i=x;i<=y;i++) //把最長回文子串輸出

printf("%c",buf[i]);

printf("\n");

return 0;

}/*樣例輸入:confuciuss say:madam,i'm adam.

*樣例輸出:madam,i'm adam

*//分析得出最長回文子串的過程

*(1) for(i=0;i=0 && i+j=0表示i到j的距離不能上溢

//i+jmax) //因為子串的長度為奇數,所以子串的長度應該等於j*2+1(j為以i為中心,往兩邊的距離)

//儲存當前最長回文子串長度,記錄子串範圍

}*(3) for(j=0;i-j>=0 && i+j+1max)

}}*字串s="confuciusssaymadamimadam"

*字串長度m=24

*第乙個for迴圈迴圈到i=18的時候

*也就是遍歷到s[18]位置上,這時s[18]='i'

*接著進行內部迴圈,執行第二個迴圈體,開始以i為中心點,向兩邊擴充套件

*i=18,j=0,滿足條件,執行if語句,s[i-j]=i,s[i+j]=i,s[i-j]=s[i+j]不滿足條件

*執行下一條if語句,判斷j*2+1是否大於max,0*2+1max,max=7,p[i-j]=15,p[i+j]=21

*j=4;s[i-j]=a;s[i+j]=a;

*j*2+1>max,max=9,p[i-j]=14,p[i+j]=22

*j=5;s[i-j]=m;s[i+j]=m;

*j*2+1>max,max=11,p[i-j]=13,p[i+j]=23,x=13,y=23

*j=6;i+j>m,結束本次迴圈

*繼續執行下乙個for語句

*i=18,j=0,滿足迴圈條件,執行迴圈體

*s[i-j]!=s[i+j+1];滿足條件,break跳出迴圈

*到此最長的回文子串已經得出來了,不過還要繼續遍歷字串,直到結束為止

*最後結果:madam,i'm adam

*/

經典演算法 最長回文子串

時間限制 1000ms 單點時限 1000ms 記憶體限制 64mb 小hi和小ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。這一天,他們遇到了一連串的字串,於是小hi 就向小ho 提出了那個經典的問題 小ho 你能不能分別在...

演算法競賽入門經典 C 入門

include 提供輸入輸出流 include 提供常用演算法 using namespace std const int maxn 100 10 int a maxn int main return0 宣告陣列時,陣列大小可以用const宣告的常數。在c 中,這樣的寫法更加推薦。include i...

演算法競賽入門經典 1

想著要學演算法已經很長時間了,但一直都是有問題自己想,很少受 正規軍 編排,網上關於演算法的書倒是不少,其一必推 演算法導論 還有一本 演算法競賽入門經典 作者劉汝佳,好了,步入正題,兩天時間從第一章到第三章結尾,算是對c又進行了一遍複習,說一下新得 3d 3d 03d 知道它們的區別嗎,在呼叫pr...