题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“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;
}
本文探讨如何在给定字符串中找到最长的对称子字符串,并通过算法实现这一目标。详细介绍了对称子字符串的概念,以及如何使用双指针技巧进行搜索。此算法的时间复杂度为O(n^2),适用于字符串分析任务。
1228

被折叠的 条评论
为什么被折叠?



