题目:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 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 };