题目

解题思路

题目要求找出给定字符串中不含有重复字符的最长子串的长度。这是一个典型的滑动窗口的题目,可以通过滑动窗口去解答。

滑动窗口

具体操作如下图示:
找到一个子串 s[left...right] 不含重复字符;

为了寻找最长子串,右边界 right 右移,拓展子串长度;

若此时的字符 s[right + 1] 跟子串 s[left...right] 相比较,s[right + 1] 跟子串中的每个字符都不同,则将字符 s[right + 1] 也纳入到子串中;

若此时的字符 s[right + 1] 跟子串 s[left...right] 中的某个字符相同,则将左边界 left 右移,刨除 s[left...right] 中的那个重复的字符;

刨除后,继续组成没有重复元素的子串

...

从 left 到 right 这个区间形成一个滑动窗口,窗口不停向前滑动,寻找不含重复字符的最长子串,记录子串的长度,并求最长的子串长度。

Show me the Code

int lengthOfLongestSubstring(char * s){
int res = 0;
int len = strlen(s);
/* 存储 ASCII 字符在子串中出现的次数 */
int freq[256] = {0};
/* 定义滑动窗口为 s[l...r] */
int l = 0, r = -1;
while (l < len) {
/* freq 中不存在该字符,右边界右移,并将该字符出现的次数记录在 freq 中 */
if (r < len - 1 && freq[s[r + 1]] == 0) {
freq[s[++r]]++;
/* 右边界无法拓展,左边界右移,刨除重复元素,并将此时左边界对应的字符出现的次数在 freq 的记录中减一 */
} else {
freq[s[l++]]--;
}
/* 当前子串的长度和已找到的最长子串的长度取最大值 */
res = fmax(res, r - l + 1);
} return res;
}

更多精彩

请关注

回复「算法」,即可获取经典高清无码算法与数据结构相关电子书籍~

  

滑动窗口经典题 leetcode 3. 无重复字符的最长子串的更多相关文章

  1. 【LeetCode】无重复字符的最长子串【滑动窗口法】

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc&quo ...

  2. [LeetCode]3. 无重复字符的最长子串(滑动窗口)

    题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc ...

  3. leetcode刷题笔记-3. 无重复字符的最长子串(java实现)

    题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "ab ...

  4. Leetcode题库——3.无重复字符的最长子串

    @author: ZZQ @software: PyCharm @file: lengthOfLongestSubstring.py @time: 2018/9/18 20:35 要求:给定一个字符串 ...

  5. Leetcode(三)无重复字符的最长子串

    3. 无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...

  6. [LeetCode]3.无重复字符的最长子串(Java)

    原题地址: longest-substring-without-repeating-characters/submissions 题目描述: 示例 1: 输入: s = "pwwkew&qu ...

  7. [LeetCode] 3. 无重复字符的最长子串

    题目链接:(https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/) 题目描述: 给定一个字符 ...

  8. 【leetcode 3. 无重复字符的最长子串】解题报告

    思路:滑动窗口的思想 方法一:滑动窗口 int lengthOfLongestSubstring(string s) { /* 控制一个滑动窗口,窗口内的字符都是不重复的,通过set可以做到判断字符是 ...

  9. LeetCode 3: 无重复字符的最长子串 Longest Substring Without Repeating Characters

    题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. Given a string, find the length of the longest substring withou ...

随机推荐

  1. libminipng,压缩png的swift-framework

    libminipng 通过lodepng解析png图片,使用pngquant算法进行压缩的swift-framework 方法说明: /// 通过PNG图片Data压缩 /// /// - Param ...

  2. [Java] 数据分析 -- NoSQL数据库

    MongoDB概念:与关系型数据库对应 database(数据库):数据库 collection(集合):表 document(文档):行 field(域):列/字段 注意事项 文档是一组键值(key ...

  3. [OS] 概述&学习资料

    计算机启动 启动自检 初始化启动 启动加载 内核装载 登录 中断 硬件中断 I/O设备 CPU Timer:时间片结束后,发中断给CPU Scheduler:将CPU合理分配任务使用 异常中断 内存: ...

  4. 如何解决在WordPress安装Redis插件时需要输入FTP问题?

    用LAMP或者LNMP搭建Worepress的时候,安装主题或者插件时候,往往提示需要输入FTP服务端信息的问题,其实这是一个坑,可以完全避免的 我们只需在wp-config.php文件最后添加以下代 ...

  5. IDEA 安装 zookeeper 可视化管理插件

    1. 安装 zookeeper 插件 打开 IDEA->Settings->Plugins,然后在 Marketplace 输入 "zookeeper" 如下: 插件安 ...

  6. UCOS 多任务系统中需要注意的地方 一个任务至少要有一些执行内容

    图片说明: 在一个TASK的最外层FOR();中  如果有调用BREAK会怎样??

  7. Bootstrap Bootstrap3 与 Bootstrap4 的区别

    Bootstrap3 与 Bootstrap4 官网地址 Bootstrap3 官网:https://v3.bootcss.com Bootstrap4 官网:https://v4.bootcss.c ...

  8. java_[类加载器]

    Class 与 类加载 Class对象由JVM自动产生,每当一个类被加载时,JVM就自动为其生成一个Class对象,通过Class对象可以获得类的相关信息. 将类信息读到内存中过程,称为类加载 Jav ...

  9. kylin优化的思想

    kylin的核心优势在于使用额外的空间存储预计算的结果,以换取查询时间的缩减. 所以我们要对额外的空间进行优化,并且在空间优化之后,cuboid无法完全命中时,对查询时间进行优化. 空间优化的思路就是 ...

  10. Python3 url解码与参数解析

    Python3 url解码与参数解析 有些子节点名字直接就是编码后的url,就像下面这行一样: url='dubbo%3A%2F%2F10.4.5.3%3A20880%2Fcom.welab.auth ...