最长不含重复字符的子字符串
Last updated
Last updated
问题简述
思路1:双指针(推荐)
双指针同向遍历每个字符;同时使用哈希表记录每个字符的最新位置;
如果右指针遇到已经出现过的字符,则将左指针移动到该字符的位置,更新最大长度;
具体细节见代码;
思路2:动态规划
[最长不含重复字符的子字符串(动态规划 / 双指针 + 哈希表,清晰图解)](https://
状态定义 leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof/solution/mian-shi-ti-48-zui-chang-bu-han-zhong-fu-zi-fu-d-9/)
记 dp[i] := 以第 i 个字符为结尾的不含重复字符的子串的最大长度
;
转移方程
使用一个 hash 表记录每个字符上一次出现的位置;
因为当前状态只与上一个状态有关,因此可以使用一个变量代替数组(滚动);
初始状态
dp[0] = 1