无重复字符的最长子串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 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 由英文字母、数字、符号和空格组成
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
注意:
- 不能用对象,因为对象里面不能存空字符串或空格
- 计算map的长度:用size,Object.keys(map).length 计算出来的map是0,不知道为啥
- 这里因为会超过10的数字排序,所以不能直接sort
arr.sort(function(a,b){
return a-b
}) - 别忘了会出现全部不重复的情况
var lengthOfLongestSubstring = function(s) {
if(s.length <= 1){
return s.length
}else{
var i = 0
var len = s.length
var arr = []
var max = 0
for(i = 0; i < len; i++){
// var obj ={}
map = new Map()
// var k = 0
for(j=i;j<len;j++){
if(!map.has(s[j])){
map.set(s[j],1)
// obj[s[j]] = s[j] 不能用对象,因为对象里面不能存空字符串或空格
// max = Math.max(max,j-i+1) 方法一
}else{
// arr[i] = Object.keys(map).length //这样计算出来的map是0,不知道为啥,所以要用size
// arr[i] = map.size//不可以在这判断长度,因为有可能会出现没有重复的字符串,就不会进入else
break
}
arr[i] = map.size //方法二
}
}
arr.sort(function(a,b){ //方法二 这里因为会超过10的数字排序,所以不能直接sort
return a-b
}).reverse()
return arr[0] //方法二
// return max //方法一
}
};