最长对称子串
对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定 Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。
输入格式:
输入在一行中给出长度不超过1000的非空字符串。
输出格式:
在一行中输出最长对称子串的长度。
输入样例:
Is PAT&TAP symmetric?
输出样例:
11
今天做pta的题刷到这道,刚开始直接left=len/2,right=len/2+1从中间开始找了,然后又发现对称的字串位置可以不在中间,接着一直在想如何从字符串的左右两端出发寻找……
后来找了网上的题解发现很强大
①如果字符串长度是奇数,可以将字符串中任意一个字符看为对称轴,假设为a[i],字符串初始长度num=1;0<=i<len,则left=i-1,right=i+1
while(left>=0&&right<len&&a[left]==a[right]){left--;right++;num+2;}//如果轴两边字符对称,left左移,right右移,长度+2
②如果字符串长度是偶数,可以将任意两个相邻字符的中间看为轴,则left=i,right=i+1,字符串初始长度num=0;
while(left>=0&&right<len&&a[left]==a[right]){left--;right++;num+2;}//如果轴两边字符对称,left左移,right右移,长度+2
同时每次循环要对对称子串的最大长度进行更新,以便找到最长对称子串