C語言 最長回文字串

2021-09-21 17:34:11 字數 797 閱讀 2307

馬拉車演算法現在僅僅是看懂,以後會回來填坑。

動態規劃的本質就是求表

但是遞推式很難求

這裡設定乙個二維陣列jud[10][10]

有jud[i][j]

jud[1][8]的意義是判斷位置1的字元到位置8的字元形成的字串是否為回文字串

所以必有ij的部分全部設定為0。(true為1,false為0)

判斷是否為回文字串的遞推式:

s[i]==s[j],jud[i+1][j-1]==1

這個遞推式很好理解,例如abbba

bbb顯然是回文字串 此時jud[1][3]=1,我們在判斷時只需要判斷s[0]是否與s[4]相等就可以了

還有最重要的乙個問題,動態規劃的求表方法要根據題目來判斷,比如最經典的0-1揹包問題,按行來求表即可。但在本題中我們按列來求。因為jud[i+1][j-1]位於jud[i][j]的上一列下一行,如果依舊按行遍歷就會出現,jud[i+1][j-1]還沒有進行計算的問題。

#include

char a[10]=「bbcabcdefg」;//目標陣列

void prin(int (*jud)[10],int i,int j);

for(i=0;i<10;i++)

jud[i][i]=1;//每個單個字元都是乙個回文串

for(i=0;i<10;i++)}

}for(j=0;j<10;j++)}}

}prin(jud,10,10);//這裡列印一下動態規劃的**

for(maxi;maxi<=maxj;maxi++)

printf("\n");

回文字串判斷c語言 動態規劃 最長回文字串

給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為1000。示例1 輸入 babad 輸出 bab 注意 aba 也是一 個有效答案。示例2 輸入 cbbd 輸出 bb 這是一道非常經典的動態規劃的題目,我是在回顧演算法題的時候看到這一題,我記得我以前做過,但是理解不深,所以當時我怎麼...

最長回文字串

scanf s 輸入字串碰到空格或者tab就會停下來。此處可以使用fgets或者gets 另外注意標頭檔案cctype中的函式的巧妙使用,此處使用isalpha和toupper簡化了 此處列舉字串的中間位置,然後向倆邊擴充套件,節省了時間複雜度,注意向倆邊擴充套件時,奇數個和偶數個長度的區別。另外程...

最長回文字串

回文串定義 回文串 是乙個正讀和反讀都一樣的字串,比如 asddsa 或者 lovekevol 等等就是回文串。回文子串,顧名思義,即字串中滿足回文性質的子串。這裡我給出通過 列舉回文串的中間位置i,然後不斷向外擴充套件,直達有字元不相同。注意,這裡長度為奇數和偶數的處理方式是不一樣的。下面給出 這...