OR146. 最长对称子字符串
描述
输入描述
字符串输出描述
字符串示例1
输入:
a1223a
输出:
22
C 解法, 执行用时: 2ms, 内存消耗: 300KB, 提交时间: 2021-09-11
#include <stdio.h> #include <string.h> char* solve(char* a ) { int len=strlen(a); int i,j,k,n=0,max=0; for(i=len;i>0;i--) { for(j=0;j+i<=len;j++) { for(k=0;k<i/2;k++) if(a[j+k]!=a[i+j-k-1]) break; if(k==i/2) { int a1; char rt[1000],index=0; for(a1=j;a1<j+i;a1++) rt[index++]=a[a1]; strcpy(a,rt); return a; } } } return ""; } int main() { char s[1000]; while(scanf("%s",s)!=EOF) { if(strlen(s)==1) { printf("%s\n",s); continue; } printf("%s\n",solve(s)); } return 0; }
C++ 解法, 执行用时: 2ms, 内存消耗: 360KB, 提交时间: 2020-09-26
#include <iostream> #include <string> using namespace std; bool isSymmetric(string str,int start,int end) { int i,len=end-start+1; bool res=true; for(i=0;i<len/2&&res;i++) res=(str[start+i]==str[end-i]); return res; } int main() { int i,j,len; string str,res; while(cin>>str) { len=str.length(); int start=0,templen=0,maxlen=0; for(i=0;i<len;i++) { for(j=i+maxlen;j<len;j++) { if(isSymmetric(str,i,j)) { templen=j-i+1; if(templen>maxlen) { maxlen=templen; start=i; } } } } res=str.substr(start,maxlen); cout<<res<<endl; } return 0; }