lis & dilworth
首先,先明白子串和子序列之间的差别:
以字符串 abcdefgh 为例:
-
字符子串指的是字符串中连续的字符
eg. abc, efg····
-
字符子序列指的是字符串中先后顺序一致但不一定连续的字符
eg. adg, cdgh····
可以去掉字符串中的部分字符,但不可改变其前后顺序。
最长上升子序列(LIS)
序列(1, 7, 3, 5, 9, 4, 8) ,其最长上升子序列长度为4,其中一条LIS(1,3,5,8)
ps.与最长非降序子序列(二者区别就是序列中是否可以有相等的数)同理。
要用集合的观念来理解此类问题:
子序列、公共子序列以及最长公共子序列都不唯一
对于固定的数组,虽然LIS序列不一定唯一,但LIS的长度是唯一的
解决方案:
采用贪心+二分 O(nlogn)