题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 }

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

 
 
 
 

  

猜你喜欢

转载自www.cnblogs.com/missjingjing/p/9560388.html
今日推荐