給定乙個字串 s ,找到 s 中最長的回文子串,輸出其長度。你可以假設 s 的最大長度為 3000。
第1行:1個字串
樣例輸入樣例輸出babad
對於乙個字串s[l,r],他的最長回文字串有如下兩種情況1.若s[l] == s[r] 且 s[l+1,r-1]為回文字串,則s[l,r]會變為更長的乙個回文字串
2.否則在s[l,r-1]和s[l+1,r]之間必有乙個最長的不超過r-l的回文字串
湊字數的
問題來了
如何才能判斷s[l,r]為回文字串呢?
大家當然可以迴圈搜尋,用乙個二維陣列(清為-1)記錄
初始值:interval[i,i] (i=1~n)=1
當interval[l+1,r-1]=-1,搜尋;
當interval[l+1,r-1]=1,返回值true,如果s[l]==s[r],那麼interval[l,r]=1;
當interval[l+1,r-1]=0,返回值false,interval[l,r]=0。
也可以用dp[l,r]是否等於l-r+1來o(1)判斷(**展示此方法)
#include #include #include using namespace std;
const int m = 3e3 + 5;
char a[m];
int f[m][m];
int len;
void read()
len = temp;
}int main()
for(int i = 2; i <= len; i ++)
else
} }printf("%d", f[1][len]);
return 0;
}
題解 最長回文子串
剛學完字尾陣列,用這道題來練練 sa 題目右 ural 1297 題意如題目,即給出乙個字串 s 求 s 的最長回文子串。s leqslant1000 既然剛學了字尾陣列,自然使用字尾陣列做啦。但如何將問題轉化為乙個 sa 問題呢 先來觀察一下下面這個字串的回文子串吧。rt,可以發現,回文子串 ba...
最長回文串
輸入乙個字串,求出其中的最長回文字串,樣例輸入 confucicss say madam,i m asam。樣例輸出 masam,i m asam。這個題首先要判斷最長那個回文串的位置,並且與大小寫無關,用到函式 toupper 然後輸出後面的字串。include include include i...
最長回文串
時間限制 1000ms 單點時限 1000ms 記憶體限制 64mb 描述 小hi和小ho是一對好朋友,出生在資訊化社會的他們對程式設計產生了莫大的興趣,他們約定好互相幫助,在程式設計的學習道路上一同前進。這一天,他們遇到了一連串的字串,於是小hi就向小ho提出了那個經典的問題 小ho,你能不能分別...