面试题leetcode 3. 无重复字符的最长子串 暴力法和滑动窗口解法
最初的思路遍历每个字符,找到以它开始的最长的子串。俗称暴力法,确实很暴力,时间复杂度达到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. 无重复字符的最长子串 暴力法和滑动窗口解法相关推荐
- [贪心|字符串] leetcode 3 无重复字符的最长子串
[贪心|字符串] leetcode 3 无重复字符的最长子串 1.题目 题目链接 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例1: 输入: "abcabcbb" ...
- LeetCode 3. 无重复字符的最长子串(滑动窗口+哈希)
1. 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...
- 【LeetCode】无重复字符的最长子串【滑动窗口法】
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- [leetcode] 3.无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...
- LeetCode 3:无重复字符的最长子串 思考分析
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- LeetCode之无重复字符的最长子串
1. 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度.示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "ab ...
- leetcode算法—无重复字符的最长子串 Longest Substring Without Repeating Characters
关注微信公众号:CodingTechWork,一起学习进步. 题目 Longest Substring Without Repeating Characters: Given a string, fi ...
- LeetCode 3. 无重复字符的最长子串 (滑动窗口哈希表)
3. 无重复字符的最长子串 题意: 找子串 子串中无重复字符 要求子串长度最长 解法1(暴力法) 思路: 建立一个长度不断变小的滑动窗口 用一个指针指针扫描窗口内的每个元素: 如果除去指针指向的那个元 ...
- leetcode -- 3.无重复字符的最长子串
内容描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. class Solution(object):def lengthOfLongestSubstring(self, s):& ...
最新文章
- Callable、Future和FutureTask
- 【Linux】Linux用户、用户组、文件权限学习笔记
- 值得收藏!动图演示神经架构搜索
- 知识总结: Activity的四种启动模式
- 解决无法连接到visual studio开发服务器的问题
- SCN风波又起,2019年6月之前Oracle必须升级吗?
- python实现文件编码转换_Python实现批量转换文件编码的方法
- 查看文件md5_了解 | Mongodb 文件存储之 GridFs
- Java拦截器和过滤器
- android 美拍加表情,怎么把美拍加表情
- H265 Vs VP9
- [计算机组成原理]海明校验及其实现
- python现在版本强势英雄_当前版本中后期强势英雄排行榜,第一名后期无敌!
- 独家 | 想成为一名数据科学家?你得先读读这篇文章
- CDH6.3.3 paywall版之前自定义http服务器放置parcels安装数据
- 猜秘密三位数(人、机互相猜)小游戏
- 第十届蓝桥杯 2019年国赛 最优旅行
- 石灰墙上的这种污渍怎么去掉?黑色灰色的
- Unity:计算两个物体(没有父子关系)的相对坐标
- MySQL——建表建库基本命令