题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。
比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
// 求最长对称子字符串 O(n^2)
// 思路:在搜索对称子字符串的同时计算其长度
char* GetLongestSymmetrySubstring(const char* pStr)
{
if(pStr == NULL)
return NULL;
char buffer[1024];
memset(buffer, 0, 1024);
buffer[0] = *pStr;
int maxLength = 1;
const char* pChar = pStr + 1;
while(*pChar != '\0')
{
// 对称字符串的长度可以是奇数也可以是偶数
// 对称字符串是奇数的情形
const char* pFirst = pChar - 1;
const char* pLast = pChar + 1;
while(pFirst > pStr && *pLast != '\0' && *pFirst == *pLast)
{
--pFirst;
++pLast;
}
int newLength = pLast - pFirst - 1;
if(newLength > maxLength)
{
maxLength = newLength;
memcpy_s(buffer, newLength, pFirst + 1, newLength);
}
// 对称字符串是偶数的情形
pFirst = pChar;
pLast = pChar + 1;
while(pFirst > pStr && *pLast != '\0' && *pFirst == *pLast)
{
--pFirst;
++pLast;
}
newLength = pLast - pFirst - 1;
if(newLength > maxLength)
{
maxLength = newLength;
memcpy_s(buffer, newLength, pFirst + 1, newLength);
}
pChar++;
}
return buffer;
}