题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
算法一:O(n^3)
判断字串是否对称是从外到里, O(n)
#include
/*
*判断起始指针,到结束指针的字符串是否对称
*/
int IsSymmetrical(char* pBegin, char* pEnd)
{
if(pBegin == NULL || pEnd =来源gaodaima#com搞(代@码网= NULL || pBegin > pEnd)
return 0;
while(pBegin <pEnd)
{
if(*pBegin != *pEnd)
return 0;
pBegin++;
pEnd–;
}
return 1;
}
/*
*查找最大对称字串长度,时间复杂度是O(n^3)
*/
int GetLongestSymmetricalLength(char* pString)
{
if(pString == NULL)
return 0;
int symmetricalLength = 1;
char* pFirst = pString;
int length = strlen(pString);
while(pFirst <&pString[length-1])
{
char* pLast = pFirst + 1;
while(pLast <= &pString[length-1])
{
if(IsSymmetrical(pFirst, pLast))
{
int newLength = pLast – pFirst + 1;
if(newLength > symmetricalLength)
symmetricalLength = newLength;
}
pLast++;
}
pFirst++;
}
return symmetricalLength;
}
int main()
{
char* str = “google”;
int len = GetLongestSymmetricalLength(str);
printf(“%d”, len);
return 0;
}
以上就是最大对称字符串的算法的详细内容,更多请关注gaodaima搞代码网其它相关文章!