题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
解法:pChar指向当前字符,比如第一个‘o',那么以pChar为中心向俩边判定。要分奇数偶数俩种情况,由于要遍历n个字符,且最多向两边扩展长度为n,所以复杂度O(n^2)。
int GetLongestSymmetricalLength_2(char* pString)
{
if(pString == NULL)
return 0;
int symmeticalLength = 1;
char* pChar = pString;
while(*pChar != '\0')
{
// Substrings with odd length
char* pFirst = pChar - 1;
char* pLast = pChar + 1;
while(pFirst >= pString && *pLast != '\0' && *pFirst == *pLast)
{
pFirst--;
pLast++;
}
int newLength = pLast - pFirst - 1;
if(newLength > symmeticalLength)
symmeticalLength = newLength;
// Substrings with even length
pFirst = pChar;
pLast = pChar + 1;
while(pFirst >= pString && *pLast != '\0' && *pFirst == *pLast)
{
pFirst--;
pLast++;
}
newLength = pLast - pFirst - 1;
if(newLength > symmeticalLength)
symmeticalLength = newLength;
pChar++;
}
return symmeticalLength;
}