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

时间:2023-12-12 22:49:20

题目:

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

示例 1:

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

思路:

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

代码实现C++:

 class Solution {
public:
int lengthOfLongestSubstring(string s) {
int freq[] = {}; //用于存储字符的出现的频率,类似于set的效果,判断是否含有重复字符。
int l = , r = -; //滑动窗口[l...r]
int res = ; //最长不重复字符串的长度 while(l<s.size())
{
//首先保证下一个要考察的字符不越界,且下一个考察的字符之前不重复
if(r+<s.size() && freq[s[r+]] == )
{
r++; //窗口右边界右移一位
freq[s[r]]++; //维护freq数组
}
else //下一个考察的字符是重复的
{
freq[s[l]]--; //维护freq数组
l++; //窗口左边界右移一位
}
//在该轮循环中,窗口完成了移动
res = max(res,r-l+); //更新res
}
return res;
}
};