第二题没思路......过段时间再看好了....
题目:
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
输入: "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 }
感觉自己的思维容易跑偏啊,去考虑乱七八糟的问题