题解 | #密码截取#
密码截取
http://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1
#include <stdio.h>
#define MAX(a,b) ((a>b)?(a):(b))
/*
1、有效密码方式分两种,分别为ABA、ABBA
2、第一种,找到中间值,判断两边的字符是否相等。
3、第二种,直接判断相邻的两个字符是否相等
4、把两种长度做比较,最大的即为结果
*/
static int find_pass(char *str, int len)
{
if(!str)
{
return -1;
}
int x = 0;
int y = 0;
int len_ABA = 1;
int len_ABBA = 0;
int max = 0;
for(int i = 0; i < len; i++)//第一种,找到中间值,判断两边的字符是否相等。
{
x = i - 1;
y = i + 1;
len_ABA = 1;
while(x >= 0 && y < len)
{
if(str[x] == str[y])
{
x--;
y++;
len_ABA += 2;
max = MAX(max, len_ABA);
}
else
{
break;
}
}
//printf("[%d]__len_ABA = [%d]\n", i,len_ABA);
x = i;
y = i + 1;
len_ABBA = 0;
while(x >= 0 && y < len)//第二种,直接判断相邻的两个字符是否相等
{
if(str[x] == str[y])
{
x--;
y++;
len_ABBA += 2;
max = MAX(max, len_ABBA);
}
else
{
break;
}
}
//printf("[%d]__len_ABBA = [%d]\n", i,len_ABBA);
}
return max;
}
int main()
{
char str[2500] = {0};
gets(str);
int len = strlen(str);
int max = find_pass(str, len);
printf("%d\n", max);
return 0;
}