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