在一行上输入一个长度为
,仅由大小写字母和数字构成的字符串
,代表截获的密码。
在一行上输出一个整数,代表最长的有效密码串的长度。
ABBA
4
在这个样例中,没有无关字符,所以最长的有效密码串就是
本身,长度为
。
12HHHHA
4
在这个样例中,最长的有效密码串是
,长度为
。
#include <stdio.h>
int check_password(char* pas){
int len = strlen(pas);
for (int i = len - 1; i >= 0; i --){
if (pas[i] == pas[0]){
for (int n = 0, m = i; m >= n; n += 1, m -= 1){
if (pas[n] != pas[m]){
break;
} else{
if (m == n || m - 1 < n + 1){
return i + 1;
}
}
}
}
}
return 0;
}
int main() {
char password[2501];
scanf("%s", password);
int len = 0;
for (int i = 0; i < strlen(password) - len; i ++){
len = len > check_password(password + i) ? len : check_password(password + i);
}
if (strlen(password) == 1)
printf("1");
else
printf("%d", len);
return 0;
} #include <stdio.h>
#include <string.h>
int main() {
int i, j;
int left, right;
int res, Max = 0;
char str[2501];
while (scanf("%s", str) != EOF) { // 注意 while 处理多个 case
int len = strlen(str);
for (i = 1; i < len; i++) {
res = 0;
left = right = i; //奇数对称
res = 1;
while (left >= 1 && right <= len - 2) {
if (str[--left] == str[++right])
res += 2;
else break;
}
Max = res > Max ? res : Max;
}
for (i = 1; i < len-1; i++) {
res = 0; //注意每个循环开始清零
if (str[i] == str[i + 1]) { //偶数对称
left = i;
right = i + 1;
res = 2;
while (left >= 1 && right <= len - 2) {
if (str[--left] == str[++right])
res += 2;
else break;
}
} //记住偶数循环必须在整个if条件里面
Max = res > Max ? res : Max;
}
printf("%d", Max);
return 0;
}
} //对称的密码长度有奇偶两种
//先找最中间对称的那两个或者三个字符
//以此为起点向两边搜索,并更新最大的对称长度
#include <stdio.h>
#include <string.h>
int main() {
char str[2501] = {'\0'};
gets(str);
int ec = 0;
int s = 0 , e = 0;
//两个窗口滑动
for(int i = 0; i < strlen(str) - 2; i++){
if(str[i] == str[i + 1]){
s = i - 1;
e = i + 2;
while(s >= 0 && e <= strlen(str) - 1 && str[s] == str[e]){
--s,++e;
}
if(ec < e - s - 1) ec = e - s - 1;
}
}
//三个窗口滑动
for(int i = 0; i < strlen(str) - 3; i++){
if(str[i] == str[i + 2]){
s = i - 1;
e = i + 3;
while(s >= 0 && e <= strlen(str) - 1 && str[s] == str[e]){
--s,++e;
}
if(ec < e - s - 1) ec = e - s - 1;
}
}
printf("%d",ec);
return 0;
} #include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define N 2501
void FindMaxOushu(char s[], int index, int* cnt, int len)
{
int left = index - 1;
int right = index + 2;
int temp = 2;
while(1){
if(left < 0 || right >= len){
break;
}
if(s[left] == s[right]){
left--, right++;
temp += 2;
}else{
break;
}
}
*cnt = temp > *cnt ? temp : *cnt;
}
void FindMaxJishu(char s[], int index, int* cnt, int len)
{
int left = index - 1;
int right = index + 3;
int temp = 3;
while(1){
if(left < 0 || right >= len){
break;
}
if(s[left] == s[right]){
left--, right++;
temp += 2;
}else{
break;
}
}
*cnt = temp > *cnt ? temp : *cnt;
}
int main()
{
char s[N] = {0};
scanf("%s", s);
int len = strlen(s);
int cnt = 0;
for(int i = 0; i < len-1; i++){
// 1.遍历查找偶数长的
if(s[i] == s[i+1]){
FindMaxOushu(s, i, &cnt, strlen(s));
}
}
for(int i = 0; i < len-2; i++){
// 2.遍历查找奇数长的
if(s[i] == s[i+2]){
FindMaxJishu(s, i, &cnt, strlen(s));
}
}
printf("%d\n", cnt);
return 0;
}
#include <stdio.h>
#include <string.h>
int main() {
char code[2501];
scanf("%s",code);
int max=1,len=0,len1,tempi;
for(int i=0; i<strlen(code); i++){
len=i,tempi=1;
len1=i+1;
if(i>=strlen(code)-i-1) len1=len=strlen(code)-i-1;
for(int j=1; j<=len&&code[i-j]==code[i+j]; j++,tempi+=2);
if(tempi>max) max=tempi;
tempi=0;
for(int j=1; j<=len1&&code[i-j+1]==code[i+j]; j++,tempi+=2);
if(tempi>max) max=tempi;
}
printf("%d\n",max);
return 0;
} #include <stdio.h>
#include <string.h>
#define N 2500
int main()
{
char str[N];
gets(str);
int len=strlen(str),i=0,j,k,left,right,flag;
while(len-i>0)
{
flag=0;
for(j=0;j<=i;j++)
{
left=j;right=len-i+j-1;
while(left<right)
{
if(str[left]!=str[right])
break;
left++;right--;
}
if(left>=right)
{
flag=1;
break;
}
}
if(flag==1)
break;
i++;
}
printf("%d\n",len-i);
return 0;
} #include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[10000] = {0};
int len;
while(scanf("%s", str) != EOF){
int MaxNum = 0;
int Num = 0;
len = strlen(str);
if(len-1 == 0) {
Num++;
printf("%d\n", Num);
}
else{
for(int i = 0; i < len; i++){
int left = i;
for(int right = len-1; right >= i; right--){
if(str[left] == str[right] && left != right) {
Num += 2;
left++;
if(left == right) {
MaxNum = MaxNum > Num ? MaxNum : Num;
left = i;
Num = 0;
}
}
else if(left == right && str[left-1] == str[right+1]){
Num++;
MaxNum = MaxNum > Num ? MaxNum : Num;
left = i;
Num = 0;
}
else {
if(Num != 0)
right++;
Num = 0;
left = i;
}
}
}
printf("%d\n", MaxNum);
}
}
}