您的位置:首页 > 其它

对称子字符串的最大长度

2017-01-12 20:09 197 查看
输入一个字符串,输出该字符串中对称的子字符串的最大长度。比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。

提示:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版。

int getMaxLenOfPalindrome(char *str, char* newstr) {
int mx = 0, id, i = 0, size = strlen(newstr);
int p[SIZE * 2 + 2] = { 0 };
for (; i < size; i++) {
p[i] = mx > id ? mx - id > p[2 * id - i] ? p[2 * id - i] : mx - id:0;

while (newstr[i + 1 + p[i]] == newstr[i - 1 - p[i]]) {
p[i]++;
}
if (p[i] + i > mx) {
mx = p[i] + i;
id = i;
}
}

int maxLen = 0;
for (i = 0; i < size; i++) {
if (p[i] > maxLen) {
maxLen = p[i];
id = i;
}
}

int j;
if (maxLen > 2) {
printf("回文:");
for (i = (id - 1 - maxLen) / 2, j = 0; j < maxLen; j++) {
printf("%3c", str[i++]);
}
printf("\n");
return maxLen;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息