leetcode-3、无重复字符的最长子串(c++)
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例1
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例2
输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例3
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
整体思路:
1、定义两个变量temp,result。变量temp用来临时存储没有重复元素的子串,result用来存储当前最大长度且没有重复元素的子串。
2、遍历给定字符串s,如果s[i]在字符串temp中已存在,则删除temp中从下标0到s[i]重复元素区间的子串。再将s[i]添加到temp中。
3、如果s[i]在字符串temp中已存在,在删除temp中从下标0到s[i]重复元素区间的子串之前,先判断temp的长度是否比result大,如果是,则将temp的元素赋给result.
4、由于对应解可能在给定字符串s的尾部,返回值时返回temp、result中长度较长的变量。
代码:
<