单调递增最长子序列
-
描述
-
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4-
输入
-
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
- 输出字符串的最长递增子序列的长度 样例输入
-
3 aaa ababc abklmncdefg
样例输出
-
1 3 7
来源
#include<stdio.h>
#define maxn 10000+10
#include<string.h>
char str1[maxn];
int Len[maxn];
/*
int Max(int a,int b)
{
return a>b?a:b;
}
*/
void LIS(char *p)
{
memset(Len,0,sizeof(Len));
int l=strlen(p);
for(int i=0;i<l;i++)
{
Len[i]=1;
for(int j=0;j<i;j++)
{
if(str1[i]>str1[j])
{
if(Len[i]<=Len[j])
Len[i]=Len[j]+1;
}
}
}
}
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
scanf("%s",str1);
char *p=str1;
LIS(p);
int max=0;
int ll=strlen(p);
for(int i=0;i<ll;i++)
{
max=max>Len[i]?max:Len[i];
}
printf("%d\n",max);
}
return 0;
}
-
第一行一个整数0<n<20,表示有n个字符串要处理