无重复字符的最长子串-算法面试题 乐扣 lecode无重复字符的最长子串
2021-01-15 00:14
标签:结束 === bcb doc for ini 更换 back ice 无重复字符的最长子串-算法面试题 乐扣 lecode无重复字符的最长子串 标签:结束 === bcb doc for ini 更换 back ice 原文地址:https://www.cnblogs.com/JokerAn/p/12938662.htmlDOCTYPE 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>
上一篇:JAVA工具类
文章标题:无重复字符的最长子串-算法面试题 乐扣 lecode无重复字符的最长子串
文章链接:http://soscw.com/index.php/essay/42014.html