俊介三

一天更新一点,一天积累一点

导航

PAT-1040

Posted on 2013-03-08 21:14  俊介三在前进  阅读(146)  评论(0)    收藏  举报

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;
}