无重复字符的最长子串-算法面试题 乐扣 lecode无重复字符的最长子串
Posted jokeran
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无重复字符的最长子串-算法面试题 乐扣 lecode无重复字符的最长子串相关的知识,希望对你有一定的参考价值。
思路:
循环给定的字符串 拼接到原始变量 str(默认是‘‘)并保存str的长度 maxNum
再次循环的时候判断原始变量str中是否存在了 如果没有就继续拼接并更改maxNmu
如果本次循环有了冲突 就将str从开始位置截取到与本次数值一样的地方 保存剩下的无冲突的部分
即:假设‘asdfg’遇到了d 则‘asd‘被舍弃了 原始变量str应该改变为 ‘asdf‘.slice(3) => ‘fg‘
继续循环 这里不用担心新的str会比旧的更长因为 他一定会截取一个甚至是多个的 所以不会大于旧的str的!
知道循环结束 就ok了
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>无重复字符的最长子串</title> </head> <body> <script> let s="abcabcbb"; var res = 0; // 最长无重复子串的长度 var str = ""; // 用于临时存放无重复子串 var finallystr = ""; // 最终得到无重复子串 var len = s.length; for(var i = 0; i < len; i++) { var index = str.indexOf(s[i]); if(index === -1) { str += s[i]; // 如果长度小于当前str的长度就更换数值否则不变 并且把最终无重复的字符保存起来 if(res < str.length){ res=str.length finallystr=str } } else { //如果重复了就将str截取 截取规则为 ‘abcde‘ 下一个遇到c 则支取取de 与新的c 组合为 dec //他一定小于等于原来的str最少是吧第一位截取了在在结尾追加一位 不可能比之前的 str还大 str = str.slice(index + 1) + s[i]; } } console.log(`最长的字符串是${res},字符串为${finallystr}`) /* 思路: 循环给定的字符串 拼接到原始变量 str(默认是‘‘)并保存str的长度 maxNum 再次循环的时候判断原始变量str中是否存在了 如果没有就继续拼接并更改maxNmu 如果本次循环有了冲突 就将str从开始位置截取到与本次数值一样的地方 保存剩下的无冲突的部分 即:假设‘asdfg’遇到了d 则‘asd‘被舍弃了 原始变量str应该改变为 ‘asdf‘.slice(3) => ‘fg‘ 继续循环 这里不用担心新的str会比旧的更长因为 他一定会截取一个甚至是多个的 所以不会大于旧的str的! 知道循环结束 就ok了 */ </script> </body> </html>
以上是关于无重复字符的最长子串-算法面试题 乐扣 lecode无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章
#yyds干货盘点# LeetCode面试题:无重复字符的最长子串
LeetCode 面试必备100题:无重复字符的最长子串 Longest Substring Without Repeating Characters