HJ32. 密码截取
描述
输入描述
输入一个字符串(字符串的长度不超过2500)
输出描述
返回有效密码串的最大长度
示例1
输入:
ABBA
输出:
4
示例2
输入:
ABBBA
输出:
5
示例3
输入:
12HHHHA
输出:
4
C 解法, 执行用时: 2ms, 内存消耗: 192KB, 提交时间: 2021-10-09
#include <stdio.h> #include <string.h> int main(void) { int i, j, len, max, tmp; char s[2888]; while(scanf("%s", s) != EOF) { int i, j, k, len = strlen(s), half_len = len>>1, max = 0, tmp; for(i=0; i<len; i++){ if(s[i] == s[ i+1 ]){ j = i-1; k = i+2; if(i < half_len) while(j>=0 && s[j]==s[k]) j--, k++; else while(k<len && s[j]==s[k]) j--, k++; if((tmp = k-j-1) > max) max = tmp; } if(s[ i-1 ] == s[ i+1 ]){ j = i-2; k = i+2; if(i < half_len) while(j>=0 && s[j]==s[k]) j--, k++; else while(k<len && s[j]==s[k]) j--, k++; if((tmp = k-j-1) >= max) max = tmp; } } printf("%d\n", max); } return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 192KB, 提交时间: 2021-09-19
#include<stdio.h> int main(){ char str[10000]; while(gets(str)){ int max=1; int l=strlen(str); for(int i=1;i<l;i++) { int temp=1; for(int j=1;j<=i;j++) { if(str[i-j]==str[i+j]) { temp+=2; } else{ break; } } max=max>temp?max:temp; } for(int i=1;i<l;i++) { int temp=0; for(int j=0;j<=i;j++) { if(str[i-j]==str[i+j+1]) { temp+=2; } else{ break; } } max=max>temp?max:temp; } printf("%d\n",max); } }