题解 | #密码截取#
密码截取
http://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
#include <stdio.h>
#include <string.h>
int odd(char *ptr, int len)
{
int count = 1;
char *pl = ptr-1;
char *pr = ptr+1;
for(int i = 0; i < len; i++)
{
if(*pl != *pr)
break;
count += 2;
pl -= 1;
pr += 1;
}
return count;
}
int even(char *pl, char *pr, len)
{
int count = 2;
for(int i = 0; i < len; i++)
{
if(*pl != *pr)
break;
count += 2;
pl -= 1;
pr += 1;
}
return count;
}
int secrect(char *ptr, int left, int right)
{
int len = left > right ? right: left;
if(len == 0)
return 1;
if(*ptr != *(ptr+1))
return odd(ptr, len);
int a = odd(ptr, len);
int b = even(ptr-1, ptr+2, len);
return a > b ? a : b;
}
int maxlen(int a, b)
{
return a > b ? a : b;
}
int main(void)
{
char str[2501];
while(gets(str))
{
int max = 1;
int len = strlen(str);
for(int i = 0;i < len; i++)
{
max = maxlen(max, secrect(str+i, i, len - i));
}
printf("%d\n", max);
}
return 0;
}