对称子字符串的最大长度

    技术2022-05-20  48

    题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串"google",由于该字符串里最长的对称子字符串是"goog",因此输出4。

     

    我的代码在时间复杂度为0(n2)下完成查找

    //============================================================================ // Name : 对称字符串的最大长度.cpp // Author : // Version : // Copyright : Your copyright notice // Description : Hello World in C++, Ansi-style //============================================================================ #include <iostream> #include<stdio.h> #include<stdlib.h> using namespace std; int GetLongestSymetricalLength(char *a,int length,char **begin,char **end) { if(!a) return -1; if(length==1) return 1; if(length==2) { if(a[0]==a[1]) { *begin=a; *end=a+1; return 2; } else { *begin=*end=a; return 1; } } int maxLength=0; for(char *pTemp=a;*pTemp!='/0';pTemp++) { char *left=pTemp-1; char *right=pTemp+1; while(left>=a&&*right!='/0'&&*left==*right) { left--; right++; } if(right-left-1>maxLength) { maxLength=right-left-1; *begin=left+1; *end=right-1; } left=pTemp; right=pTemp+1; while(left>=a&&*right!='/0'&&*left==*right) { left--; right++; } if(right-left-1>maxLength) { maxLength=right-left-1; *begin=left+1; *end=right-1; } } return maxLength; } int main() { char a[20]="google"; int length=strlen(a); char *begin=NULL; char *end=NULL; int maxLength=GetLongestSymetricalLength(a, length,&begin,&end); cout<<maxLength<<endl; if(maxLength>0) { for(char *s=begin;s<=end;s++) cout<<*s<<" "; cout<<endl; } return 0; }


    最新回复(0)