单调递增最长子序列

单调递增最长子序列

时间限制:3000 ms  |  内存限制:65535 KB

难度:4

描述

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

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

输入

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

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

输出

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

样例输入

3

aaa

ababc

abklmncdefg

样例输出

1

3

7

import java.util.Arrays;
import java.util.Scanner;
public class Main {
    
    static int maxLen(String str,int n){
        int a[]=new int[n+1];
        char ch[]=str.toCharArray();
        Arrays.fill(a, 1);
        for(int i=0;i<=ch.length;i++){
            for(int j=i+1;j<ch.length;j++){
                if(ch[j]>ch[i] && a[j]<a[i]+1)
                    a[j]=a[i]+1;
            }
        }
        
        int max=-10000;
        for(int i=0;i<n;i++){
            if(max<a[i]) max=a[i];
        }
        return max;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc=new Scanner(System.in);
        int m=sc.nextInt();
        
        while(m-->0){
            String str=sc.next();
            System.out.println(maxLen(str,str.length()));
            
            
        }
        sc.close();
    }

}
原文地址:https://www.cnblogs.com/watchfree/p/5313643.html