NC23501. 小A的回文串
描述
输入描述
输出描述
一行输出一个整数,表示通过这样的操作后可以得到最大回文子串的长度。
示例1
输入:
dcbaabc
输出:
7
说明:
将前面的dcba移动到末尾变成abcdcba,这个字符串的最大回文子串就是它本身,长度为7C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 364K, 提交时间: 2019-04-12 19:52:48
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn=1e5; char a[maxn]; int main() { string s; cin >>s; s+=s; int len=s.length(); int l=0; a[l++]='#'; for(int i=0;i<len;i++) { a[l++]=s[i]; a[l++]='#'; } int i,ans=1; for(i=1;i<strlen(a);i++) { int l=1; while(a[i-l]==a[i+l]&&l<=len/2)l++; ans=max(ans,l-1); } cout << ans <<endl; return 0; }
C++11(clang++ 3.9) 解法, 执行用时: 188ms, 内存消耗: 98284K, 提交时间: 2020-02-27 11:51:28
#include<bits/stdc++.h> using namespace std; bool palin[10001][10001]; int main() { string s; cin>>s; s+=s; int n=s.length(); int ans=0; memset(palin,0,sizeof palin); for(int i=1;i<n;i++) { for(int j=i;j>=0&&i-j+1<=n/2;j--) { if(s[i]==s[j]&&((i-j<2)||palin[j+1][i-1])) { palin[j][i]=1; ans=max(ans,i-j+1); } } } cout<<ans<<endl; return 0; }