leetcode 题3

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

示例 1:

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

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

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

解题方法:采用滑窗法,

//i:窗口的第一个字符位置

//j:窗口之外的第一个字符   其中 i不能超过j

//k:用于遍历窗口

//我的思路:当遇到窗口中的字符s[k]与窗口外的字符s[j]相等时,将此时窗口的首位置移到k处

//如果s[j]字符与窗口内的字符都不相等,我们再次计算长度即可,

 

leetcode 题3

 

class Solution {

public:

    int lengthOfLongestSubstring(string s) {

        int max = 0; //最大长度

        int i = 0;   // 计算字符串长度的参考位置  也就是窗口的首位置

        int size = s.size(); //字符串的长度

       for(int j =0 ; j <size ;  j++)

       {

            for (k = i ; k < j ; k++)

            {

              if (s[k] == s[j])

              {

                 i = k +1;

              }

            }

        max =  ( max > (j - i +1))? max : ( j - i +1);

       }

     return  max;

    }

};