1040. Longest Symmetric String (25)
http://pat.zju.edu.cn/contests/pat-a-practise/1040
给一个字符串,求最长的对称串的长度。
最初思路:复制一个它的反串,求它们最大的公共子串,想了下复杂度是O(n^2)?
还是直接遍历字符串,每个作为中心找记录最长串比较方便。
注意abba和aba这两种形式的对称都要处理。
View Code
#include <stdio.h> #include <string.h> int len; int getSymm(char* str, int pos){ int count1=0; //aba int left=pos-1,right=pos+1; while(left>=0 && right<len && str[left]==str[right]){ count1++; left--; right++; } count1 = 2*count1+1; //abba left = pos,right=pos+1; int count2=0; while(left>=0 && right<len && str[left]==str[right]){ count2++; left--; right++; } count2 *=2; return count2>count1?count2:count1; } char str[1005]; int main(){ gets(str); int max = 0; int i; len = strlen(str); for(i=0;i<len;i++){ if(max<getSymm(str,i)) max = getSymm(str,i); } printf("%d\n",max); return 0; }

浙公网安备 33010602011771号