【算法专题突破】双指针 - 无重复字符的最长子串(10)

简介: 【算法专题突破】双指针 - 无重复字符的最长子串(10)

1. 题目解析

题目链接:3. 无重复字符的最长子串 - 力扣(Leetcode)

这道题目不难理解,就是查找最长的无重复字符的最长子串,

最后返回最长子串的长度即可。

2. 算法原理

第一个想到的当然是暴力解法,我们枚举所有符合0情况的子串即可,

但是肯定还有优化的方法,用暴力大多超时,还没意思,我们来看看该怎么优化:

我们可以使用滑动窗口来优化暴力解法:

首先定义两个指针,让字符进哈希表,如果出现重复字符,就出窗口,知道没有重复字符,

然后我们再继续让字符进哈希表,记录子串的最大长度最后返回即可:

3. 代码编写

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int len = 0;
        unordered_set<char> win;
        for(int left = 0, right = 0; right < s.size(); right++) {
            while(win.find(s[right]) != win.end()) {
                win.erase(s[left]);
                left++;
            }
            len = max(len, right - left + 1);
            win.insert(s[right]);
        }
        return len;
    }
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

相关文章
|
2月前
|
算法
【算法】位运算算法——判断字符是否唯一
【算法】位运算算法——判断字符是否唯一
|
2月前
|
算法
【算法】滑动窗口——无重复字符的最长子串
【算法】滑动窗口——无重复字符的最长子串
|
4月前
|
算法
双指针算法
双指针算法
29 2
|
1月前
|
算法 索引 容器
双指针算法详解
本文介绍了双指针算法及其应用。双指针算法是在数组或字符串中常用的高效技术,通过维护两个指针遍历数据结构以解决特定问题。根据指针移动方向,可分为同向双指针、相向双指针和快慢指针。同向双指针如移动零和复写零问题;快慢指针如快乐数问题;相向双指针如盛水最多的容器、有效三角形数量及多数之和等问题。通过合理运用双指针技巧,可简化代码并提高效率。
34 4
双指针算法详解
|
1天前
|
算法 C++
【算法】双指针+二分(C/C++
【算法】双指针+二分(C/C++
|
4月前
|
机器学习/深度学习 搜索推荐 算法
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
【再识C进阶2(下)】详细介绍指针的进阶——利用冒泡排序算法模拟实现qsort函数,以及一下习题和指针笔试题
|
2月前
|
算法 容器
【算法】双指针
【算法】双指针
|
2月前
|
算法 C++ 容器
【C++算法】双指针
【C++算法】双指针
|
5月前
|
存储 C语言
字符指针作为函数参数
字符指针作为函数参数
49 2