无重复字符的最长子串-算法面试题 乐扣 lecode无重复字符的最长子串

2021-01-15 00:14

阅读:563

标签:结束   ===   bcb   doc   for   ini   更换   back   ice   

思路:
      循环给定的字符串 拼接到原始变量 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无重复字符的最长子串

标签:结束   ===   bcb   doc   for   ini   更换   back   ice   

原文地址:https://www.cnblogs.com/JokerAn/p/12938662.html

上一篇:JAVA工具类

下一篇:ElasticJob和SpringBoot


评论


亲,登录后才可以留言!