PAT_1040: Longest Symmetric String

来源:互联网 发布:单片机仿真器下载 编辑:程序博客网 时间:2024/06/06 00:41

Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, given "Is PAT&TAP symmetric?", the longest symmetric sub-string is "s PAT&TAP s", hence you must output 11.

Input Specification:

Each input file contains one test case which gives a non-empty string of length no more than 1000.

Output Specification:

For each test case, simply print the maximum length in a line.

Sample Input:
Is PAT&TAP symmetric?
Sample Output:
11
备注:用的最基础的dp算法(O(N2) time and O(N2) space),具体思路可参考leetcode上的文章:http://leetcode.com/2011/11/longest-palindromic-substring-part-i.html 
#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXSIZE 1000int main(){char s[MAXSIZE];int *table[MAXSIZE];int i, j, len, slen;int maxlen=1;gets(s);slen = strlen(s);for(i = 0; i < slen; i++){table[i] = (int *)malloc(sizeof(int*)*slen);memset(table[i],0,slen);}for(i=0; i<slen; i++){table[i][i]=1;}for(i=0; i<slen; i++){if(s[i]==s[i+1]){table[i][i+1]=2;maxlen = 2;}}for(len=3; len<=slen; len++)for(i=0; i<slen; i++){j = i+len-1;if(j>slen)break;if(table[i+1][j-1]>0 && s[i]==s[j]){table[i][j] = len;maxlen = len;}}printf("%d",maxlen);return 0;}