题目讲解
最长不重复子串就是从一个字符串中找到一个连续子串,该子串中任何两个字符都不能相同,且该子串的长度是最大的。
给定一个字符串string,找出string中无重复字符的最长子串
题目举例
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be asubstring, "pwke"
is a subsequence and not a substring.
解题思路
第一,因为本题要找的是无重复的子串,所以,我们很容易想到从头开始遍历给定的字符串s, 简单来货就是每遍历一个,判断HashSet中是否有该字符,假设此时遍历到了i的位置,那么就有下面两种情况:
if no,就将字符加入HashSet, 表明子串的长度又增大了一个,即prev~i位置的字符串是无重复字符的,更新最长字串的长度max_str;
if yes,就从prev位置开始循环遍历,直到找到与i位置字符相等的那个字符,然后prev指向那个字符位置+1的位置,i继续遍历。
结束遍历(i==len)时,最后返回最终的max_str.
代码效果
jsj201 zhong