最初的思路遍历每个字符,找到以它开始的最长的子串。俗称暴力法,确实很暴力,时间复杂度达到O(n^3),唯一的好处是它能解决问题。暴力遍历法的大概流程是准备一个hash字符数组,然后遍历每个字符放到hash表里,有重复的则记录子串长度,然后重置hash表并从下一个字符开始。

滑动窗口解法时间复杂度可以达到O(n),相较于暴力法节省了不少,但其思路和暴力法却没有根本差异,都是遍历字符,难就难在不容易想到。暴力解法每次遇到重复的字符都会从下一个字符开始,滑动窗口则是从冲突的字符下一位开始继续往下找,已经确定不重复的就不用重复比较了。假定窗口存储了最长子串,头尾指针分别记为head, end。下一个字符指针是( end + 1),将该字符和[ head, end ]比较,如果在位置i 出现相同,则记录当前子串长度(end - head),将窗口指针跟新为( i + 1, end + 1),如此比较,直到走到末尾,返回最大长度即可,确实省了很多重复计较。

//滑动窗口解法
int lengthOfLongestSubstring(char * s){int head, end, cur, len = 0, max = 0;head = end = 0;while(s[end] != '\0'){if (head != end){cur = head;while(cur < end){if (s[cur++] == s[end]){head = cur;break;}}}max = max > (end - head + 1) ? max : (end - head + 1);end++;}return max;
}

=============================================================================================

Linux应用程序、内核、驱动、后台开发交流讨论群(745510310),感兴趣的同学可以加群讨论、交流、资料查找等,前进的道路上,你不是一个人奥^_^。

面试题leetcode 3. 无重复字符的最长子串 暴力法和滑动窗口解法相关推荐

  1. [贪心|字符串] leetcode 3 无重复字符的最长子串

    [贪心|字符串] leetcode 3 无重复字符的最长子串 1.题目 题目链接 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例1: 输入: "abcabcbb" ...

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

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

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

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

  4. [leetcode] 3.无重复字符的最长子串

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

  5. LeetCode 3:无重复字符的最长子串 思考分析

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

  6. LeetCode之无重复字符的最长子串

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

  7. leetcode算法—无重复字符的最长子串 Longest Substring Without Repeating Characters

    关注微信公众号:CodingTechWork,一起学习进步. 题目 Longest Substring Without Repeating Characters: Given a string, fi ...

  8. LeetCode 3. 无重复字符的最长子串 (滑动窗口哈希表)

    3. 无重复字符的最长子串 题意: 找子串 子串中无重复字符 要求子串长度最长 解法1(暴力法) 思路: 建立一个长度不断变小的滑动窗口 用一个指针指针扫描窗口内的每个元素: 如果除去指针指向的那个元 ...

  9. leetcode -- 3.无重复字符的最长子串

    内容描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. class Solution(object):def lengthOfLongestSubstring(self, s):& ...

最新文章

  1. Callable、Future和FutureTask
  2. 【Linux】Linux用户、用户组、文件权限学习笔记
  3. 值得收藏!动图演示神经架构搜索
  4. 知识总结: Activity的四种启动模式
  5. 解决无法连接到visual studio开发服务器的问题
  6. SCN风波又起,2019年6月之前Oracle必须升级吗?
  7. python实现文件编码转换_Python实现批量转换文件编码的方法
  8. 查看文件md5_了解 | Mongodb 文件存储之 GridFs
  9. Java拦截器和过滤器
  10. android 美拍加表情,怎么把美拍加表情
  11. H265 Vs VP9
  12. [计算机组成原理]海明校验及其实现
  13. python现在版本强势英雄_当前版本中后期强势英雄排行榜,第一名后期无敌!
  14. 独家 | 想成为一名数据科学家?你得先读读这篇文章
  15. CDH6.3.3 paywall版之前自定义http服务器放置parcels安装数据
  16. 猜秘密三位数(人、机互相猜)小游戏
  17. 第十届蓝桥杯 2019年国赛 最优旅行
  18. 石灰墙上的这种污渍怎么去掉?黑色灰色的
  19. Unity:计算两个物体(没有父子关系)的相对坐标
  20. MySQL——建表建库基本命令

热门文章

  1. 软件需求说明书文档格式
  2. 做一个可以和时空分类的神经网络
  3. 【Paper】2015_异构无人机群鲁棒一致性协议设计_孙长银
  4. PyTorch 实现经典模型1:LeNet5
  5. STM32 基础系列教程 3 – 外部中断
  6. Allegro16.6软件布局设计技巧:模块复用
  7. C++ 之类的静态成员
  8. 使用SpringBoot的jackson包进行实体类型转换
  9. MS CRM 2011 Quick Find Active View
  10. nodejs连接mysql报connect ECONNREFUSED错误的解决方法