3. 无重复字符的最长子串 - 力扣(LeetCode)
解法:同向双指针————“滑动窗口”
思路:如下图,当right进窗口后,就出现了a重复,所以在left出窗口时时,需要跳到第一个a 后面的位置,窗口才合法,而这个操作可以用哈希表来实现(判断是否重复出现就看哈希表里那个位置是否为1),而因为窗口的滑动需要重新算数,所以出窗口时left值要--。
1.left = 0,right = 0
2.进窗口————先直接进一个
3.判断————判断是否重复出现就看哈希表里那个位置是否为1
4.出窗口+重复判断————哈希表中left所在字符--
5.更新数据—————选出更长的len
class Solution
{
public:int lengthOfLongestSubstring(string s) {int hash[128]={0};int len = 0;for(int left = 0,right = 0;right<s.size();){//1.进窗口hash[s[right]]++;//2.循环判断while(hash[s[right]]>1){//3.出现重复,出窗口hash[s[left++]]--; }//4.更新结果len = max(len,right - left + 1);right++;}return len;}
};