js
1. 以下哪些值为0
A. (() => {}).length
b. +[]
A. 1 & 2
A. [1,2,-3].reduce((a,b) => {a - b}, 0)
答案:ABCD
原理:
A:函数的长度就是形参的长度,该箭头函数没有形参,所以长度为0
B:
2. 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
自己写了一个方法,思路是将字符串变成数组并且将他切割成所有有可能拼接的格式,例如[1,2,3]切割为[1],[2],[3],[1,2],[2,3]。然后将里面有重复元素的去掉就只剩下符合要求的,最后返回其中长度最大的长度即可。(遗憾的是该方法虽然可行,但是时间,内存消耗颇大,力扣上不能通过)
var lengthOfLongestSubstring = function(s) {
if(s.length === 0) {
return 0
}
let arr = []
let num = 1
for(let i = 0; i < s.length; i++) {
let ary = s.split("")
for(let j = 0; j < s.length; j ++) {
let data = ary.slice().slice(j, num)
if(data.length === [... new Set(data)].length) {
arr.push(data)
}
}
num ++
}
let len = 0
arr.forEach(item => {
if(item.length > len) {
len = item.length
}
})
return len
};
在献上一篇力扣的答案,简单明了
var lengthOfLongestSubstring = function(s) {
// 滑动窗口初始化为一个空数组
let arr = [];
// 要返回的字符串的长度
let max = 0;
for (let i = 0; i < s.length; i++) {
// 使用 indexOf 判断是否在数组中出现过
let index = arr.indexOf(s[i])
// 如果出现过
if (index !== -1) {
// 从数组开头到当前字符串全部截取掉
arr.splice(0, index + 1);
}
// 在窗口右边放进新的字符
arr.push(s.charAt(i));
// 更新下最大值
max = Math.max(arr.length, max);
}
// 返回
return max;
};
网友评论