题意
输出给定子串中最长的子序列的长度。
思路
想法1:直接遍历同时记录这个是否已算在了最大长度内,如果它重复出现了就更新最大值,然后把记录用的变量初始化一下,时间复杂度$O(n)$。但这是错误的,给出个反例
abac
。想法2:其实这不就是
滑动窗口
吗!时间复杂度$O(n)$。写完后感觉那个while
很刺眼,于是考虑能否把它去掉。想法3:可以记录每个对应的
s[i]
上次出现的位置的下一个位置,这样当更新到这个字符时直接“跳”到对应位置就可以了,时间复杂度也为$O(n)$,但是比较次数应该比上面的少。但是!提交后发现这样竟然比上面的做法慢!是因为数据的问题使每次更新最大值导致运算次数比上面的多了吗?
代码
- 代码1:
1 | class Solution { |
- 代码2:
1 | class Solution { |
总结
太久没写,手生了啊。尽快捡起来吧。