题解 | #密码截取#
密码截取
https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
#include <stdio.h>
#include <string.h>
int maxHash(int n[], int len)
{
int max = 0;
for (int i = 1; i < len; i++)
{
//printf("%d", n[i]);
if (n[i] > max)
max = n[i];
}
return max;
}
int main() {
char str[2501];
gets(str);
// 用哈希存储
int hash1[2500] = { 0 };
int hash2[2500] = { 0 };
int len = strlen(str);
// 最大奇回文
for (int i = 1; i < len - 1; i++)
{
int l = 1;
for (int j = 1; i + j < len && i - j >= 0; j++)
{
if (str[i + j] != str[i - j])
{
//printf("%c %c", str[i + j], str[i - j]);
break;
}
l=l+2;
}
hash1[i] = l;
}
{
// 最大偶回文
for (int i = 0; i < len; i++)
{
int l = 0;
for (int j = 1; i + j < len && i - j >= 0; j++)
{
if (str[i + j] != str[i - j + 1])
{
break;
}
//printf("%c %c", str[i - j + 1], str[i + j]);
l=l+2;
}
hash2[i] = l;
}
}
if(maxHash(hash1, len)> maxHash(hash2, len))
printf("%d\n", maxHash(hash1, len));
else {
printf("%d\n", maxHash(hash2, len));
}
return 0;
}
