最长递增子串问题

eg:

一个字符串"1 4 2 3 5",求最长递增子串。

结果为"1 2 3 5"最大递增子串的长度为4

可以采用动态规划的方法来解决这个问题:

我们可以把原问题进行分解,分别求出第1个位置上的递增子串的长度,第2个位置上的xx长度.....第n个位置上的xx长度。。。

不妨设置一个数组longest[len]来存储1~n个位置上递增子串的长度,然后在数组中找出最大的那个数,就是最递增子串的长度

表达式为: longest[j] = max{longest[i] + 1,longest[j]} 

下面贴出实现的代码:

package ggg;

public class Test {

	public static int getCount(char[] a,int len){
		int[] longest=new int[len];
		for(int i=0;i<len;i++){
			longest[i]=1;
		}
		for(int j=1;j<len;j++){
			for(int i=0;i<j;i++){
				if(a[j]>a[i]&&longest[j]<longest[i]+1){
					longest[j]=longest[i]+1;
				}
			}
		}
		int max=0;
		for(int j=0;j<len;j++){
			if(longest[j]>max){
				max=longest[j];
			}
		}
		return max;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String s="1  4 2 3 5";
		String s1=s.replaceAll(" ", "");
		char[] c=s1.toCharArray();
		System.out.println(getCount(c,c.length));
			
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值