题解 | #密码截取#
密码截取
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; }