1.无重复字符的最长子串
题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
方法一:滑动窗口
使用两个指针表示字符串中的某个子串(的左右边界)。其中左指针代表着上文中「枚举子串的起始位置」,而右指针即为上文中的rk
在每一步操作中,会将左指针向右移动一格,表示开始枚举下一个字符作为起始位置,然后可以不断地向右移动右指针,需要保证这两个指针对应的子串中没有重复的字符。在移动结束后这个子串就对应着以左指针开始的,不包含重复字符的最长子串。
在枚举结束后,找到最长的子串的长度为答案。
判断是否有重复字符,常用哈希集合。在左指针向右移动的时候,从哈希集合中移除一个字符,在右指针向右移动的时候,往哈希集合中添加一个字符。

复杂度分析
时间复杂度:O(N),其中N是字符串的长度,左指针和右指针分别会遍历整个字符串一次。
空间复杂度:O(∣Σ∣),其中Σ表示字符集(即字符串中可以出现的字符),∣Σ∣表示字符集的大小,,本题没有明确说明字符集,可以默认为所有 ASCII 码在 [0, 128) 内的字符,即 ∣Σ∣=128。要用到哈希集合来存储出现过的字符,而字符最多有∣Σ∣,空间复杂度为O(∣Σ∣)。
该博客介绍了如何使用滑动窗口算法解决字符串中无重复字符的最长子串问题。通过两个指针移动,结合哈希集合判断字符是否重复,最终找到最长子串的长度。时间复杂度为O(N),空间复杂度为O(∣Σ∣),其中N为字符串长度,∣Σ∣为字符集大小。示例中给出了输入'abcabcbb',最长子串为'abc',长度为3。
831

被折叠的 条评论
为什么被折叠?



