给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其
长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"
,所以其长度为 1。
示例 3:
输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是"wke"
,所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke"
是一个子序列,不是子串。
示例 4:
输入: s = ""
输出: 0
提示:
0 <= s.length <= 5 * 104
s
由英文字母、数字、符号和空格组成
可以用JavaScript中的Set 集合类去做这道题 因为set中不会出现重复的元素 即使重复add 也不会有变化
例如:
var a = new Set(['1','2','3']);
a.add(4); //a变为['1','2','3','4']
a.add(4); //a不会有变化 还是['1','2','3','4']
用简单的BF算法就可以实现这道题 BF算法又称简单匹配算法或者暴力搜索 采用穷举方法 基本思路是从第一个字符开始匹配,如果不符合条件 就从第二个字符开始匹配。
题解如下:
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
var a = new Set();
var left;
var sum=0;
var max=0;
for(left=0;left<s.length;left++){
for(let i=left;i<s.length;i++){
if(a.has(s[i])){
if(a.size>max){
max=a.size;
}
sum=0;
a.clear();
break;
}
else{
a.add(s[i]);
}
}
}
return max>a.size?max:a.size
};