字符串的最大递增子串

本文介绍了如何使用动态规划算法求解字符串的最大递增子串问题。通过定义dp数组,表示字符串从开始到某个位置的最大递增子串长度,然后找出子问题之间的递推关系,最终得到求解最大递增子串的策略。
摘要由CSDN通过智能技术生成

字符串的最大递增子串

苏大   希望失望


问题

假设有一个字符串str,现求解出其长度最大的递增子串。

相关定义

子串:一个字符串substr是另一个字符串str的子串,需要满足两个条件:substr中的任一字符都在str中存在;substr中的字符在str中需要按序存在。例如,令str="aghkbdl",那么"akd"是其子串,而"adk"却不是其子串,因为在str中k在d的前面。

递增子串:首先是字符串的子串,其次需要满足子串中的字符是递增的。

问题分析

        假设有一字符串x1, x2,x3,...,xn。那么,该字符串的以任意字符开始且依次选择任意长度构成的串都是该字符串的子串。那么,我们首先应该想到的是“枚举法”即生成所有递增子串,然后遍历这些递增子串,从中选择出长度最大的。然后,其时间复杂度很高。具体求解代码可以参考问题求解节。

        我们知道,现存有很多算法设计思想,比如常用的就是枚举和回溯法。事实上上还有分治法和动规。分治法一般用于降低n^2复杂度。动规需要利用空间换时间。下面,我们来介绍如何利用动规求解该问题。

        要利用动态规划求解问题。需要做到三点:子问题的定义,子问题之间的递推关系,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值