3.无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。

请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。



主要思路:滑动窗口

维护一个滑动窗口,窗口内的都是没有重复的字符,去尽可能的扩大窗口的大小,窗口不停的向右滑动。

  • (1)如果当前遍历到的字符从未出现过,那么直接扩大右边界;
  • (2)如果当前遍历到的字符出现过,则缩小窗口(左边索引向右移动),然后继续观察当前遍历到的字符;
  • (3)重复(1)(2),直到左边索引无法再移动;
  • (4)维护一个结果 res,每次用出现过的窗口大小来更新结果 res,最后返回 res 获取结果。

时间复杂度:O(n)

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int res_max = 0;
        int i,j,k=0;
        if(s == " ") res_max = 1;
        for(int i = 0; i<s.size() ; i++){
            for(int j = k; j<i; j++){
                if(s[j] == s[i]){
                    k = j+1;
                    break;
                }
            }
            if(i-k+1 > res_max) res_max = i-k+1 ;
        }
        return res_max;
    }
};
posted @ 2020-02-15 22:16  马尔尤尤  阅读(127)  评论(0编辑  收藏  举报