Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.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 我的算法能被认为是O(n)吗&引用;查找具有唯一字符的最长子字符串“;_Javascript_Algorithm_Time Complexity_Big O - Fatal编程技术网

Javascript 我的算法能被认为是O(n)吗&引用;查找具有唯一字符的最长子字符串“;

Javascript 我的算法能被认为是O(n)吗&引用;查找具有唯一字符的最长子字符串“;,javascript,algorithm,time-complexity,big-o,Javascript,Algorithm,Time Complexity,Big O,我偶然发现了这个练习: 创建一个函数,该函数返回具有唯一性的最长子字符串 人物 我只是想知道我提出的解决方案是否实现了O(n)时间复杂性 i、 e: 只有一个for循环没有嵌套,所以这应该是O(n)对的,让我怀疑的是,当tempStr遇到一个重复字符时,迭代器会返回到该重复字符最后一次出现的字符串索引,这样就增加了需要执行的运行时操作,并且不确定它是否仍然是O(n) 异步函数maxUniqueStr(字符串){ 设maxStr=“”; 让tempStr=“”; 让lastSeen={}; for

我偶然发现了这个练习:

创建一个函数,该函数返回具有唯一性的最长子字符串 人物

我只是想知道我提出的解决方案是否实现了O(n)时间复杂性

i、 e:

只有一个for循环没有嵌套,所以这应该是O(n)对的,让我怀疑的是,当tempStr遇到一个重复字符时,迭代器会返回到该重复字符最后一次出现的字符串索引,这样就增加了需要执行的运行时操作,并且不确定它是否仍然是O(n)

异步函数maxUniqueStr(字符串){ 设maxStr=“”; 让tempStr=“”; 让lastSeen={}; for(设i=0;imaxStr.length?tempStr:maxStr; lastSeen[char]=i; } 返回maxStr; }
我喜欢双指针方法:

函数f(S){
设maxLength=1
设idx=0
设l=0
设r=1
设集合=新集合([S[0]])

对于(;l)子字符串应该从开始开始,还是在中间?
tempStr.includes
这会增加额外的迭代次数,因此,不,您的函数不是
O(n)
可以在任何地方,只要该子字符串是具有唯一字符的最长子字符串,即数据结构->astruc@Liam哦,是的,我忘了还有一个O(n),在O(n)里面另外,
lastSeen[char]
也是一个
O(n log n)
操作,因为它是一个。在真正的O(n)性能中,你永远无法做到这一点。我怀疑这是否真的很重要。你为什么在意?
getMaxSubStr("linkshortener") -> "linkshorte"
async function maxUniqueStr(string) {
  let maxStr = "";
  let tempStr = "";
  let lastSeen = {};

  for (let i = 0; i < string.length; i++) {
    let char = string.charAt(i);

    if (tempStr.includes(char)) {
      i = lastSeen[char];
      tempStr = "";
      console.log("-continue-", i);
      continue;
    }

    tempStr += char;
    maxStr = tempStr.length > maxStr.length ? tempStr : maxStr;
    lastSeen[char] = i;  
  }

  return maxStr;
}