Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 给定一个字符串s,查找最长子字符串的长度,不重复字符_Javascript_Algorithm - Fatal编程技术网

Javascript 给定一个字符串s,查找最长子字符串的长度,不重复字符

Javascript 给定一个字符串s,查找最长子字符串的长度,不重复字符,javascript,algorithm,Javascript,Algorithm,示例输入:s=“abcabcbb”输出:3说明:答案是“abc”,长度为3。我试着写这篇文章,但如果条件从未被超越。我想不出原因 var lengthOfLongestSubstring=函数{ 设集合=新集合(); 设c=0; for(设i=0;i

示例输入:s=“abcabcbb”输出:3说明:答案是“abc”,长度为3。我试着写这篇文章,但如果条件从未被超越。我想不出原因

var lengthOfLongestSubstring=函数{
设集合=新集合();
设c=0;
for(设i=0;ilog(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)
性能。美好的