字符串中最长回文字串个数
问题描述
输入一个字符串,输出这个字符串中所有子字符串中最长回文子串的长度。
示例
输入字符串“google”;
输出 4。
方法一
得到输入字符串的所有子字符串,然后判断是不是回文;
返回其中最长的长度;
时间复杂度○(n^3)。
代码
bool IsPlalindrome(char *be,char *ed) //判断是不是回文 { if(be == NULL || ed ==NULL) return false; while(be <= ed && *be==*ed){ be++; ed--; } if(be > ed) return true; return false; } int LengthOfLongestPlalindrome(char *A,int m) { if(A == NULL) return -1; int Length = 1; int LengthOfA = m; char *pFirst = A; while(pFirst < (A+LengthOfA-1) ){ char *pLast = pFirst +1; while(pLast <= (A + LengthOfA +1)){ if(IsPlalindrome(pFirst,pLast)){ int NewLength = pLast - pFirst +1; NewLength > Length ? Length = NewLength :1; } pLast++; } pFirst++; } return Length; }
方法二
遍历字符串中每个字符,在每一次循环时,判断这个字符是不是回文的中心字符;
因为回文有奇数和偶数的区别,所以可以分成两部分判断;
时间复杂度Ο(n^2)。
代码
int LengthOfLongestPlalindrome(char *A,int m) { if(A == NULL) return -1; int Length = 1; int LengthOfA = m; char *pChar = A; while(*pChar != '\0'){ char *pFirst = pChar - 1; char *pLast = pChar + 1; while(pFirst >= A && *pLast != '\0' && *pFirst == *pLast){ pFirst--; pLast++; } int newLength = pLast - pFirst -1; newLength > Length ? Length = newLength : 1 ; pFirst = pChar; pLast = pChar +1; while(pFirst >= A && *pLast != '\0' && *pFirst == *pLast){ pFirst--; pLast++; } newLength = pLast - pFirst -1; newLength > Length ? Length = newLength : 1 ; pChar++; } return Length; }
更详细信息参考博文
by:狼儿乖乖
time:2015/1/16 18:51:05