[leetcode] 5-Longest Palindromic Substring

来源:互联网 发布:向量的斜对称矩阵 编辑:程序博客网 时间:2024/04/29 01:56

Palindromic Substring:回文子串,即一个字符串从左向右写和从右向走写是一样的,或者说字符串是对称。

解决思路:遍历字符串,依次找到所有回文子串的中间位置,分别尝试往两边扩展到最大长度。取所有得到的回文子串中最长的。

一个回文子串的中间位置有两种可能,

1)形如----aa-----即s[i] == s[i-1]

2)形如----axa----即s[i] == s[i-2]

对于出现---aaa---即同时满足s[i] == s[i-1]和s[i] == s[i-2]时,分别按两种情形尝试扩展。

注意上述情形都不出现,即结果为单个字符串,最长回文串长度为1,如‘’abc‘’,结果为‘’a‘’或‘’b‘’或‘’c‘’

代码:

char* longestPalindrome(char* s){    int start = 0 ,end = 0;int i = 0,j = 0,k = -1,len = 0,maxLen = 0;char *res;res = (char *)malloc(1001*sizeof(char));while(s[i] != '\0'){if(i >= 2 && s[i] == s[i-2]){j = i + 1;k = i - 3;while(s[j] != '\0' && k >=0 && s[j] == s[k]){++ j;-- k;}len = (j - 1) - (k + 1) + 1;if(len > maxLen){start = k + 1;end = j - 1;maxLen = len;}}if(i >= 1 && s[i] == s[i-1]){j = i + 1;k = i - 2;while(s[j] != '\0' && k >=0 && s[j] == s[k]){++ j;-- k;}len = (j - 1) - (k + 1) + 1;if(len > maxLen){start = k + 1;end = j - 1;maxLen = len;}}++ i;}if(maxLen > 0){for(i=0;i<maxLen;++i){res[i] = s[start+i];}res[maxLen] = '\0';}else{res[0] = s[0];res[1] = '\0';} return res;}



0 0
原创粉丝点击