描述
Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?
数据范围:字符串长度满足 1≤n≤2500
输入描述:
输入一个字符串(字符串的长度不超过2500)
输出描述:
返回有效密码串的最大长度
示例1
输入:
ABBA
输出:
4
示例2
输入:
ABBBA
输出:
5
示例3
输入:
12HHHHA
输出:
4
#include <stdio.h>
#include <string.h>
//题目就是求最大的回文子串
int Judge(char* p, int len) { //判断是不是回文串
int flag = 1; //默认是回文串
int left = 0;
int right = len - 1;
while (left < right) {
if (p[left] == p[right]) { //判断对称相等
left++;
right--;
} else {
flag = 0; //不是回文串
break;
}
}
return flag;
}
void start() {
char str[2501];
int max_len = 1;//回文串长度,初始化为1
int len = 2; //子串长度,初始为2
scanf("%[^\n]", str);
int size = strlen(str);
while (len++ < size) {
for (int i = 0; i + len - 1 < size ; i++) { //子串从首元素开始寻找
if (Judge(&str[i], len)) {
max_len = len; //len是当前最长的回文串
}
}
}
printf("%d", max_len);
}
int main() {
start();
return 0;
}
总结:
①这题之前出现过,可以说是一模一样;
②当前帖子仅供自我精进、学习使用,有不足之处欢迎指正;

京公网安备 11010502036488号