单调递增最长子序列

来源:互联网 发布:不用网络的小说软件 编辑:程序博客网 时间:2024/06/02 05:29

我突然发现还算法还是真的很重要,从现在开始到毕业找工作每天刷一道题,实在是被虐惨了,自己好菜呀


/*描述

求一个字符串的最长递增子序列的长度

如:dabdbf最长递增子序列就是abdf,长度为4

输入

第一行一个整数0<n<20,表示有n个字符串要处理

随后的n行,每行有一个字符串,该字符串的长度不会超过10000

输出

输出字符串的最长递增子序列的长度

样例输入

3

aaa

ababc

abklmncdefg

样例输出

1

3

7*/


拿到这个题的时候我的思路是这样的,要求最大的递增子串和,我可以把这个问题划分成先求最小段的最大子串和(即以一个字符,最大和为1),在这个基础上后面每添加一个字符串就判断一次最大子串和是否加一。


#include <stdio.h>

#include <string.h>

int main()

{

    int n;//组数

    

    scanf("%d",&n);

    while (n--)

    {

        

    char str[10005];

    int sum[10005];//存储最大子字符串的个数的数组

    int i,j;

    int count=1;

    scanf("%s",str);

        

    for(i=0;i<10005;i++)

    {

        sum[i]=1;

    }

        

    for(i=0;i<strlen(str);i++)//i

        for(j=i+1;j<strlen(str);j++)

        {

                if(str[j]>str[i])//每增加一个字符判断一次最大和是否加一

                {

                    sum[j]=1+sum[i];

                }

        }

    count=1;

    for(i=0;i<strlen(str);i++)

    {

        if(count<sum[i])

            count=sum[i];

    }

    

    printf("%d\n",count);

    

    }

    return0;

}





0 0
原创粉丝点击