zoukankan      html  css  js  c++  java
  • 题3:无重复字符的最长子串

    第二题没思路......过段时间再看好了....

    题目:

    给定一个字符串,找出不含有重复字符的最长子串的长度。

    示例:

    输入: "abcabcbb"
    输出: 3 
    解释: 无重复字符的最长子串是 "abc",其长度为 3。

      我的想法是,遍历给定的字符串,用一个空字符串去接收,接受的时候判断当中的字符是否存在,如果不存在的话添加,否则就不添加,整体思路和数组去重类似  但是到了实操的时候才发现没有这么简单,而且自己一开始完全是当作数组去重那样做了,根本算不出不重复字符串的长度  然后转变思路,用一个计数器记录在遇到下一个重复字符之前的字符串长度....写着写着又发现新的问题,如果字符串足够长的话,就没办法记录几个子字符串之间谁的长度更长,所以用到一个类似求数组中最大值的思路,用另一个空字符串去动态存储长度最长的字符串,然后与随后的字符串去做比较,最后返回这个字符串.

     1 function getWithoutRepeatingString(str) {
     2   var newStr = '';
     3   var maxStr = '';
     4   var start = null;
     5   var count = null;
     6   for (var i = 0; i < str.length; i++) {
     7     //判断当前字符在newArr中是否存在,如果不存在的话
     8     if (newStr.indexOf(str.charAt(i)) === -1) {
     9       newStr += str.charAt(i);
    10     } else {
    11       //存在的话不再添加,并且计算当前长度,把长度更长的保存在maxStr中
    12       if (newStr.length > maxStr.length) {
    13         maxStr = newStr;
    14       }
    15       //在newStr中找到已存在的字符位置,从下一位开始向后记数
    16       count = newStr.indexOf(str.charAt(i)) + 1;
    17       //先截取到新字符串
    18       newStr = str.substring( start + count, i + 1);
    19       //然后把这个字符索引的下一位记为开始位置,继续向后查找
    20       start += count;
    21     }
    22   }
    23   return maxStr.length > newStr.length ? maxStr.length : newStr.length;
    24 }

      感觉自己的思维容易跑偏啊,去考虑乱七八糟的问题

    
    
    
    
    
    

      

  • 相关阅读:
    快速排序
    jenkins 升级
    JAVA中的Random()函数
    拦截器
    两个链表合并不加入新的链表空间
    统计字符 比如aaabbcca----3a2b1c1a
    折半查找两种实现
    字符串偏移
    java值传递
    基于zookeeper实现配置集中管理【转】
  • 原文地址:https://www.cnblogs.com/missjingjing/p/9560388.html
Copyright © 2011-2022 走看看