码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-05-22 19:04:31      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:结束   ===   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!