LeetCode3_无重复字符的最长子串(数组&字符串问题)

题目:

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

 

示例 1:

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

思路:

滑动窗口方法实现;用数组代替集合来记录子串是否存在不重复字符;

 

代码实现C++:

 1 class Solution {
 2 public:
 3     int lengthOfLongestSubstring(string s) {
 4         int freq[256] = {0}; //用于存储字符的出现的频率,类似于set的效果,判断是否含有重复字符。
 5         int l = 0, r = -1; //滑动窗口[l...r]
 6         int res = 0;       //最长不重复字符串的长度
 7         
 8         while(l<s.size())
 9         {
10             //首先保证下一个要考察的字符不越界,且下一个考察的字符之前不重复
11             if(r+1<s.size() && freq[s[r+1]] == 0)
12             {
13                 r++; //窗口右边界右移一位
14                 freq[s[r]]++; //维护freq数组
15             }
16             else  //下一个考察的字符是重复的
17             {
18                 freq[s[l]]--; //维护freq数组
19                 l++;          //窗口左边界右移一位
20             }
21             //在该轮循环中,窗口完成了移动
22             res = max(res,r-l+1); //更新res
23         }
24         return res;
25     }
26 };

 

posted @ 2019-11-08 09:27  Grooovvve  阅读(221)  评论(0编辑  收藏  举报