原题链接Longest Substring Without Repeating Characters

意思是找到给定字符串最长的子串,注意,子串是在字符串中由连续的字符组成的,而子序列是通过删除若干字符得到的,二者要区分开


蛮力法自然是两层for循环搞定,但是效率堪忧,需要想办法将复杂度调整到O(n),也就是只遍历一遍字符串,这就需要记录在之前是否有遇到某个字符,可以使用unordered_map,不过这里因为仅仅是字符,那么创建一个大小为256的vector就可以了,反而显得节省空间。
细想,每个不包括重复字符的子串肯定是一段连续的字符区域,头设定为front,尾设定为back。那么在仅仅遍历一遍的情况下,front肯定是不断改变了,back则就是当前遍历到的位置

  • 如果当前遍历到的这个字符在front后面没有出现过,那么front不需要移动,接着遍历后面的字符
  • 如果当前遍历到的这个字符在front后面出现过,那么从front到当前位置这个子串肯定就有重复的字符了,此时就需要改变front的位置到出现的那个字符后面的位置。也就是和当前遍历到的这个字符上一次出现的位置的下一个位置。
  • 在这个过程中,时刻更新最大的长度,因为front到back这段区域永远不可能有重复的字符,如果有,已经在第二步解决了

代码如下

class Solution {
public:int lengthOfLongestSubstring(string s) {/* 初始256大小,因为所有字符也就这么多,值记录着最后一次出现时在s中的下标,没有则是-1 */vector<int> dp(256, -1);int max_len = 0;int front = 0;for(int i = 0; i < s.size(); ++i){/* 如果当前字符在front后面出现过一次 */if(dp[s[i]] != -1 && dp[s[i]] >= front){/* 改变front的位置,指向当前遍历到的字符上一次出现的位置的后面的位置 */front = dp[s[i]] + 1;}/* 时刻更新每个字符最后一次出现时的位置 */dp[s[i]] = i;/* 时刻计算最大的长度,当前子串区域为[front, i] */max_len = max(max_len, i - front + 1);}return max_len;}};

每天一道LeetCode-----最长无重复子串相关推荐

  1. leetcode最长无重复子串384题

    给定一个字符串,请找出其中无重复字符的最长子字符串. 样例 样例 1: 输入: "abcabcbb" 输出: 3 解释: 最长子串是 "abc". 样例 2: ...

  2. LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)

    这是悦乐书的第341次更新,第365篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第2题Longest Substring Without Repeating Cha ...

  3. LeetCode题——最长无重复子串

    题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度.如: 输入: "abcbabcd" 输出: 4 解释: 因为无重复字符的最长子串是 "abcd&qu ...

  4. 用滑动窗口来解决最长无重复子串问题

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

  5. 字符串中最长无重复子串(O(n))

    2019独角兽企业重金招聘Python工程师标准>>> #include <iostream> #include <string>using namespac ...

  6. 刻意练习:LeetCode实战 -- Task16. 无重复字符的最长子串

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  7. 求字符串中最长无重复字符的子串

    题目:求一个字符串中最长的没有重复字符的子串. 思路:用hash表从i遍历查看包含i的最长 无重复子串. int max_unique_substring2(char * str) {int i,j; ...

  8. 找到字符串的最长无重复字符子串

    题目: 给定一个字符串str,返回str中最长无重复字符子串的长度. 举例: str = "abcd",返回4.  str = "aabcb",返回3. 基本思 ...

  9. 寻找一个字符串中的最长不重复子串的长度

    2019独角兽企业重金招聘Python工程师标准>>> 算法使用两个下标来分别代表不重复子串的第一个字符的前一个字符和最后一个字符,记为i和j flag为长度,n为比较的参数 < ...

最新文章

  1. 用 Ganglia 监控基于 Biginsights 的 HBase 集群性能
  2. 关于Retinex图像增强算法的一些新学习
  3. Module Zero概览
  4. 数据中心大火波及360万网站,或因UPS故障,3月10日晚法国斯特拉斯堡
  5. 嵌入式linux应用程序开发详解_【精品套餐】嵌入式linux应用驱动开发完全学习路线...
  6. 什么叫临界资源和临界区?
  7. delphi 窗体的释放
  8. 搜索+回溯问题(DFS\BFS详解)
  9. spring boot访问templates目录下的html静态页面
  10. 【Kafka】Kafka如何开启SSL 控制台消费与生产 代码消费与生产
  11. 编写tcp服务器发送hex格式_Android网络编程-TCP/IP协议
  12. C++ List的用法(整理)[转载]
  13. 爱加密脱壳(持续更新)
  14. 千梦网创108计第三十六计:当地人才招聘网,一个年入50W的战友实操案例
  15. 线性代数 | (1) 矩阵Part One
  16. 阿里P8、P9税后180W及以上到底是什么水平?
  17. 这是病,得治,懂吗?
  18. 邓白氏编码申请最后提交资料格式
  19. 自己搭建项目中存在的一些问题
  20. android最佳开发实现_在android开发中使用可访问性最佳做法

热门文章

  1. c# json datatable_KoobooJson一款高性能且轻量的JSON库
  2. 工业镜头选型计算公式_工业冷水机组制冷量的计算公式是什么?
  3. 2013豆瓣校园招聘研发类笔试题
  4. P3870 [TJOI2009]开关 线段树 异或
  5. myEclipse开发内存溢出解决办法myEclipse调整jvm内存大小java.lang.OutOfMemoryError: PermGen space及其解决方法...
  6. 关于自动增涨外链的畅想
  7. hash算法的介绍 【清晰易懂】
  8. java web 应用目录
  9. [Python人工智能] 三十四.Bert模型 (3)keras-bert库构建Bert模型实现微博情感分析
  10. [Python人工智能] 七.什么是过拟合及dropout解决神经网络中的过拟合问题