leetcode-3 Longest Substring Without Repeating Characters
来源:互联网 发布:甘比面相很好知乎 编辑:程序博客网 时间:2024/05/29 18:27
1.说明:
最基本的思路是,遍历字符串,计算以每个字符开头的无重复子串长度,但是这样做的复杂度会很大,无法通过最后一个用例(这个题目的最后一个用例是用来测试算法的时间复杂度的)。
线性复杂度的算法思想描述如下:
遍历字符串,每次计算以当前字符结尾的最长不重复子串的length,遍历完成时,就得到了整个字符串的最长不重复子串。遍历时,将每个遇到的字符及其index以key:value形式存入一个hash中,我们每遇到一个字符,从hash中取寻找,判断之前是否遇见过,如果遇见过,那以当前字符结尾的最长不重复子串的开头字符的index的最小值就是最近一次遇到的这个字符的index。那么是不是说,最近一次遇到的这个字符的index就是开头了呢?不一定,因为我们要保证两个这两个相同的字符之间没有重复字符。如何保证这一点呢?这需要我们维护一个 名叫 start 的变量,每次发现一个字符之前遇到过,那就将start更新为 之前遇到的字符index。
2.代码:
/** * @param {string} s * @return {number} */var lengthOfLongestSubstring = function(s) { var hash = { }; var start = -1; var max = 0; var dis = 0; for (var i = 0; i < s.length; i++) { if (hash[s[i]] === undefined) { dis = i - start; } else { if (hash[s[i]] > start) { dis = i - hash[s[i]]; start = hash[s[i]]; } else { dis = i - start; } } hash[s[i]] = i; max = (dis > max) ? dis : max; } return max;};
阅读全文
0 0
- LeetCode 3 - Longest Substring Without Repeating Characters
- LeetCode 3: Longest Substring Without Repeating Characters
- leetcode-3:Longest Substring Without Repeating Characters
- LeetCode(3) Longest Substring Without Repeating Characters
- leetcode 3LONGEST SUBSTRING WITHOUT REPEATING CHARACTERS
- Leetcode【3】:Longest Substring Without Repeating Characters
- [leetcode 3] Longest Substring Without Repeating Characters
- [Leetcode] 3 - Longest Substring Without Repeating Characters
- LeetCode 3:《Longest Substring Without Repeating Characters》
- [leetcode 3] Longest Substring Without Repeating Characters
- [leetcode] 3 Longest Substring Without Repeating Characters
- [Leetcode]3Longest Substring Without Repeating Characters
- leetcode 3 Longest Substring Without Repeating Characters
- LeetCode #3 Longest Substring Without Repeating Characters
- leetcode-3 Longest Substring Without Repeating Characters
- LeetCode 3 Longest Substring Without Repeating Characters
- leetcode 3: Longest Substring Without Repeating Characters
- LeetCode 3 Longest Substring Without Repeating Characters
- 列表、元祖、字典、集合详解
- 双核处理(动态规划的01背包问题)
- SQLite学习
- SICP学习记录
- 换钱的最少货币数---货币可重复用
- leetcode-3 Longest Substring Without Repeating Characters
- 【GCC】gcc中-pthread和-lpthread的区别
- Android图片加载神器之Fresco-加载图片基础[详细图解Fresco的使用]
- kotlin 官方学习教程之基本类型
- CF
- python 3 安装igraph
- Spring之——两种任务调度Scheduled和Async
- 欢迎使用CSDN-markdown编辑器
- java集合