leetcode剑指offer:最长不含重复字符的子字符串

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

 

示例 1:

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


示例 2:

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


示例 3:

输入: "pwwkew"
输出: 3

思路:本题采用滑动窗口(双指针)思想,令i,j分别指向窗口两端,初始时i=0,j=0,用map容器记录每个字符出现的位置。若当前字符(s[j])在当前窗口出现过(依据map判断),更新最长字符串长度(为i到j-1之间的字符串)并且将窗口左端点i更新为map[s[j]]+1;更新map[s[j]]的值,右端点j+1。

leetcode剑指offer:最长不含重复字符的子字符串_第1张图片

代码:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        map  mp;
        int n = s.length(), ans = 1, i =0, j=0;
        if (n==0)   return 0;
        while (j=i)
            {
                ans = max(ans, j-i);
                i = mp[s[j]] + 1;
            }
            mp[s[j]] = j;
            j++;
        }
  
        ans = max(ans, j-i);
        return ans;
    }
};

 

你可能感兴趣的:(leetcode剑指offer:最长不含重复字符的子字符串)