Javascript 给定一个字符串s,查找最长子字符串的长度,不重复字符
示例输入:s=“abcabcbb”输出:3说明:答案是“abc”,长度为3。我试着写这篇文章,但如果条件从未被超越。我想不出原因Javascript 给定一个字符串s,查找最长子字符串的长度,不重复字符,javascript,algorithm,Javascript,Algorithm,示例输入:s=“abcabcbb”输出:3说明:答案是“abc”,长度为3。我试着写这篇文章,但如果条件从未被超越。我想不出原因 var lengthOfLongestSubstring=函数{ 设集合=新集合(); 设c=0; for(设i=0;i
var lengthOfLongestSubstring=函数{
设集合=新集合();
设c=0;
for(设i=0;i log(lengthOfLongestSubstring(“abcabcbb”)
您需要添加实际字符
set.size=0
不起作用。它是Set
的只读属性
然后,您需要存储最后找到的最长字符串,并将其也存储起来
有Set
和无count
的版本,因为Set
有size
const
longestSubstring=函数{
设集合=新集合,
最长=0;
用于(常数c/s){
如果(已设置为(c)){
如果(最长您可以尝试以下方法:
var lengthOfLongestSubstring = function (s) {
let res = 0;
let set = new Set();
let i = 0;
let j = 0;
while (i < s.length && j < s.length) {
if (!set.has(s[j])) {
set.add(s[j]);
j++;
if (j - i > res) res = j - i;
} else {
set.delete(s[i]);
i++;
}
}
return res;
};
var lengthOfLongestSubstring=函数{
设res=0;
设集合=新集合();
设i=0;
设j=0;
而(ires)res=j-i;
}否则{
设置。删除(s[i]);
i++;
}
}
返回res;
};
这与danhuong所描述的算法相同,只是用递归调用编写,没有可变变量
const longestSubstring=(str,i=0,j=0,found=new Set(),res=0)=>
j>=str.length
? 物件
:found.has(str[j])
? longestSubstring(str,i+1,j,found.delete(str[i])&&found,res)
:longestSubstring(str,i,j+1,found.add(str[j]),Math.max(res,j+1-i))
log(longestSubstring(“pwwkew”);
log(longestSubstring(“abcabcbb”);
log(longestSubstring(“abcabcbvwxyz”);
log(longestSubstring(“abaca”);
log(longestSubstring(“abacdefg”)代码>好的,谢谢…但是测试用例“pwkwkw”失败了,我认为应该清除集合。对。请参见编辑。对于'abaca'
,每个返回值都是2
,但应该是3
('bac'
)。哦,原因很简单。。u记录新字符,直到没有新字符。。那就是你只得到abc。。如果您这样做了,它将返回abcdef@Shilpi一个非常干净的算法,并且O(n)
性能。美好的