单调递增最长子序列
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
4
-
描述
-
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4-
输入
-
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
- 输出字符串的最长递增子序列的长度 样例输入
-
3 aaa ababc abklmncdefg
样例输出
-
1 3 7
-
第一行一个整数0<n<20,表示有n个字符串要处理
代码如下:
01.
#include <stdio.h>
02.
#include <string.h>
03.
char
str[10000];
04.
int
s[10000];
05.
int
main ()
06.
{
07.
int
i,j,n,m,max,k;
08.
scanf
(
"%d"
,&m);
09.
while
(m--)
10.
{
11.
max=0;
12.
scanf
(
"%s"
,str);
13.
n=
strlen
(str);
14.
for
(i=0;i<n;i++)
15.
{
16.
k=0;
17.
for
(j=0;j<i;j++)
18.
{
19.
if
(str[i]>str[j] && k<s[j])
20.
k=s[j];
21.
}
22.
s[i]=k+1;
23.
if
(max<s[i])
24.
max=s[i];
25.
}
26.
printf
(
"%d\n"
,max);
27.
}
28.
return
0;
29.
}