1.题目解析
本题的目标是在给定的字符串中找出不含有重复字符的最长子串,并且返回其长度,这道题核心就是如何去重并且不能遗漏以保证子串长度最长,题目来源:3.无重复字符的最长子串
2.算法原理
本题的算法原理主要是"滑动窗口"也就是"同向双指针",即使用两个指针来模拟窗口,指针的移动代表窗口的移动与收缩,在这道题中首先使用左指针指向一个字符,右指针不断向后遍历,创建哈希表存储字符出现的次数,当出现次数超过1则代表出现了重复字符,这时就要将重复字符移出哈希表,也就是左指针不断右移并且使经过的字符在哈希表中去除直到将重复字符移出窗口视角,此时更新符合条件的子串长度即可
3.代码展示
class Solution {
public:
int lengthOfLongestSubstring(string s)
{
int hash[128] = { 0 };
int n = s.size();
int left = 0,right = 0;
int len = 0;
while(right < n)
{
hash[s[right]]++;//进窗口
while(hash[s[right]] != 1)
{
hash[s[left++]]--;//移出重复元素
}
len = max(len,right - left + 1);//更新长度
right++;//继续遍历
}
return len;
}
};