应用:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
思想:在一个字符串中,有两个标记left和right。right由0移动到字符串最后一位,每次移动一位。每次移动,判断新增加的一位在之前的字符串中是否存在,如果不存在,继续移动,如果存在,移动left至新增加的right位在之前字符串中的位置的下一位。
举例:
在下图中,right第四次移动时,right移动到D上,此时之前字符串ADCB已经包含字符D,移动left至之前字符串中D的位置的下一位。以此类推
代码
var lengthOfLongestSubstring = function(str) {
if (!str.length) return 0;
let tmpStr = '';
let maxStrLen = 0;
let left = 0;
for (let i = 0; i < str.length; i++) {
if (tmpStr.indexOf(str[i]) !== -1) {
left += (str.slice(left, i).indexOf(str[i]) + 1);
continue
}
tmpStr = str.slice(left, i + 1);
maxStrLen = Math.max(maxStrLen, tmpStr.length)
}
return maxStrLen
};
所用JavaScript原生字符串函数
indexOf() 检索字符串
slice() 截取字符串,并返回截取的字符串。