现在的位置: 首页 > 综合 > 正文

算法题36 对称子字符串的最大长度

2013年06月03日 ⁄ 综合 ⁄ 共 820字 ⁄ 字号 评论关闭

题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。
比如输入字符串“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;
}

抱歉!评论已关闭.