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;
    }
};

参考了:无重复字符的最长子串 c++实现三种解法 多重循环,hashmap优化,桶优化

posted @ 2021-05-10 22:17  Dawnlight-_-  阅读(25)  评论(0编辑  收藏  举报