题解 | #密码截取#

密码截取

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;
}
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务