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