在一行上输入一个长度为
,仅由大小写字母和数字构成的字符串
,代表截获的密码。
在一行上输出一个整数,代表最长的有效密码串的长度。
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); } } }