单调递增最长子序列
- 描述
- 求一个字符串的最长递增子序列的长度
如:dabdbf最长递增子序列就是abdf,长度为4- 输入
- 第一行一个整数0<n<20,表示有n个字符串要处理
随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 - 输出字符串的最长递增子序列的长度 样例输入
3 aaa ababc abklmncdefg
样例输出1 3 7
- 第一行一个整数0<n<20,表示有n个字符串要处理
思路:只看每一个字符数组,采用冒泡排序法,从头开始,每一位的序列长度都为1,如果a[j]<a[i]并且i位上的长度小于j位上的长度+1,则i位上长度加1.
核心代码:if(s[i] > s[j]){
if(dp[i]<1+dp[j]){
dp[i] = dp[j]+1;}
}
代码:
#include<stdio.h>
#include<string.h>
int main() {
char s[10005];
int n, len, dp[10005];
scanf("%d", &n);
while(n--) {
int max = 0;
scanf("%s", s);
len = strlen(s);
for(int i = 0; i < len; i++) {
dp[i] = 1;
for(int j = 0; j < i; j++)
if(s[i] > s[j])
if(dp[i]<1+dp[j]){
dp[i] = dp[j]+1;
}
}
for(int i = 0; i < len; i++)
if(dp[i] > max)
max = dp[i];
printf("%d\n", max);
}
}