对称子字符串的最大长度
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;
}
提示:可能很多人都写过判断一个字符串是不是对称的函数,这个题目可以看成是该函数的加强版。
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;
}
相关文章推荐
- 【算法25】对称子字符串的最大长度
- 对称子字符串的最大长度
- 数据结构练习(34)对称子字符串的最大长度
- 对称子字符串的最大长度
- 对称子字符串最大长度
- 对称子字符串的最大长度
- 对称子字符串的最大长度[算法]
- 程序员面试题精选100题(46)-对称子字符串的最大长度
- 面试46题 对称子字符串最大长度
- 对称子字符串的最大长度
- 对称子字符串的最大长度
- 程序员面试100题之四十六,对称子字符串的最大长度
- 对称子字符串的最大长度
- 对称子字符串的最大长度
- 面试训练对称子字符串的最大长度
- 对称子字符串的最大长度
- 对称子字符串的最大长度
- 对称子字符串的最大长度
- 程序员面试题精选100题(46)-对称子字符串的最大长度
- 算法题36 对称子字符串的最大长度