-
描述
-
求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4
-
输入
-
第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000
输出
- 输出字符串的最长递增子序列的长度 样例输入
-
3 aaa ababc abklmncdefg
样例输出
-
1 3 7
![](https://i-blog.csdnimg.cn/blog_migrate/22614831ee006693a04599f55a6250c3.png)
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int dp[100005];
int main()
{
int N;
cin>>N;
while(N--)
{
string s;
cin>>s;
int max=0;
int len=s.length();
for(int i=0;i<len;i++)
dp[i]=1; //给定一个数组求的时候,初始值就是1,一个数组的最大序列肯定会有一个字符
for(int i=0;i<len;i++)
{
for(int j=0;j<i;j++)
{
if(s[i]>s[j]&&dp[j]+1>dp[i]) //递推公式,如果这个位置比前面的字符都大,就加入到递增序列中来
dp[i]=dp[j]+1;
}
if(max<dp[i])
max=dp[i];
}
cout<<max<<endl;
}
}