字符串的最大递增子串
苏大 希望失望
问题
假设有一个字符串str,现求解出其长度最大的递增子串。
相关定义
子串:一个字符串substr是另一个字符串str的子串,需要满足两个条件:substr中的任一字符都在str中存在;substr中的字符在str中需要按序存在。例如,令str="aghkbdl",那么"akd"是其子串,而"adk"却不是其子串,因为在str中k在d的前面。
递增子串:首先是字符串的子串,其次需要满足子串中的字符是递增的。
问题分析
假设有一字符串x1, x2,x3,...,xn。那么,该字符串的以任意字符开始且依次选择任意长度构成的串都是该字符串的子串。那么,我们首先应该想到的是“枚举法”即生成所有递增子串,然后遍历这些递增子串,从中选择出长度最大的。然后,其时间复杂度很高。具体求解代码可以参考问题求解节。
我们知道,现存有很多算法设计思想,比如常用的就是枚举和回溯法。事实上上还有分治法和动规。分治法一般用于降低n^2复杂度。动规需要利用空间换时间。下面,我们来介绍如何利用动规求解该问题。
要利用动态规划求解问题。需要做到三点:子问题的定义,子问题之间的递推关系,