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