leetcode2 查找最长不重复字串问题
来源:互联网 发布:js面向对象的理解 编辑:程序博客网 时间:2024/05/17 22:39
leetcode2 查找最长不重复字串问题 javascript
- 常规解法
/** * @param {string} s * @return {number} */var lengthOfLongestSubstring = function (s) { let currentSub = {}, //记录当前最长串的字母 currentLength = 0, //当前串的长度 maxLength = 0; //记录当前的最长串 for (let i = 0; i < s.length; i++) { if (currentSub[s[i]] === undefined) { currentLength += 1; currentSub[s[i]] = i; //记录在哪个位置 } else { //遇到重复字符串 maxLength = maxLength <= currentLength ? currentLength : maxLength; currentLength = i - currentSub[s[i]]; //更新当前串的hash let begin = currentSub[s[i]] + 1; currentSub = {}; for (let j = begin; j <= i; j++) { currentSub[s[j]] = j; } } } return maxLength > currentLength ? maxLength:currentLength;//输入为1个字母的情况};
普通的解法,没用用啥js函数,c语言思路,用hash记录下每个子串的字母,如果hash中的已经存在则表示遇到重复字母开始下一个子串查找。使用javascrupt有一个坑就是 if (currentSub[s[i]] === undefined)
这句我一开始写成了if (!currentSub[s[i]])
,这就有问题了,当currentSub[s[i]]为0时,也就是字符串的第一个字母,会判断为已经存在在hash中,因为js中!0 == true。上面解法的复杂度是O(n平方)。因为会有一个回退记录新子串的hash的过程。高端点的是用动态规划,以后学会了再更新吧hhh
- 使用js函数的算法
var lengthOfLongestSubstring = function(s) { var cur_str = '', max_len = 0; for (let i = 0; i < s.length; i++) { let last_pos = cur_str.indexOf(s[i]); if (last_pos === -1) { cur_str += s[i]; } else { max_len = cur_str.length > max_len ? cur_str.length : max_len; cur_str = cur_str.substr(last_pos + 1) + s[i]; } } return max_len = cur_str.length > max_len ? cur_str.length : max_len;};
其实计算的思路和上面的差不多,不过这个就比较快了
阅读全文
0 0
- leetcode2 查找最长不重复字串问题
- 最长不重复字串
- 最长重复不重叠字串
- 最字头之四:最长不重复字串
- 求字符串的最长不重复字串
- 求字符串的最长不重复字串
- 求不重复最长字串长度
- 最长重复字串
- 最长非重复字串
- 求字符串最长连续不重复的字串
- 网上有些例子有问题,所以重新写了下 求字符串的最长不重复字串
- 最长不重叠字串
- 求一个字符串的最长重复字串问题
- 字符串中的最长重复字串
- 每日一题8:查找文本中最长的重复字串
- 最长重复字串和两字符串中最长公子子串问题
- 算法的经典问题,求最长回文子串,最长重复字串
- Longest Substring Without Repeating Characters 最长不重复字符的字串 @LeetCode
- 固体对象
- IT风投与中国
- leetcode 502. IPO 贪心算法
- linux 系统如何自动关机和开机
- 关于socket 使用实战总结
- leetcode2 查找最长不重复字串问题
- SpringCloud(第 053 篇)CentOS7 中用 Docker 部署一个简单的基于 Eureka 服务治理发现的项目
- Servlet技术入门
- eoj 3442
- Linux安装mongoDB
- NorFlash和NandFlash
- 替换空格
- JavaScript进阶(三)之认识DOM
- Win10(x64)+Qt5.8(MSVC2015)+OpenCV3.2.0配置过程