该问题使用滑动窗口算法找到一个字符串中的最长子字符串,该子字符串中没有重复的字符。
代码示例:
function findLongestSubString(str) {
let i = 0, j = 0, max = 0, set = new Set();
while (i < str.length && j < str.length) {
if (!set.has(str[j])) {
set.add(str[j++]);
max = Math.max(max, j - i);
} else {
set.delete(str[i++]);
}
}
return max;
}
该函数使用双指针技巧来遍历字符串。变量i和j分别表示窗口左右端点的索引值。为了找到最长的子字符串,我们需要尝试将右端点向右移动,同时保持窗口中没有重复字符。使用set变量来保存窗口中字符的集合。
当遍历到一个新字符时,如果该字符不在set中,将其添加到set中,并更新max变量。如果该字符已经在set中,我们需要将窗口的左端点向右移动,以移除set中的字符,直到这个字符不再出现在set中。
最后,返回max变量,它保存了最长子字符串的长度。