3.无重复字符的最长子串-(LeetCode)
3.无重复字符的最长子串-(LeetCode)
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
示例1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
示例4:
输入: s = “”
输出: 0
提示:
0 <= s.length <= 5 * 104 s
由英文字母、数字、符号和空格组成
思路:
可以使用滑动窗口来求解,即定义两个指针:start和end,start指向当前遍历到的子串的首位置,end指向当前遍历到的子串的尾位置。循环每次让end向后遍历一位,然后在内层循环从start遍历到end-1,如果end指向的字符之前出现过,那么让start指向end字符出现的后一个位置,然后求出此时字符长度(字符长度等于end-start+1),并退出循环。然后比较新求得长度与之前长度的大小。
代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int Start = 0, End = 0, result = 0, length = 0;
while (End < s.size()) {
char ch = s[End];
for (int i = Start; i < End; i++)
if (ch == s[i]) {
Start = i + 1;
length = End - Start;
break;
}
End++;
length++;
result = max(result, length);
}
return result;
}
};