以下为ChatGPT自动生成的解答,正确与否请自行判断。 也许你也可以从大家的发帖中找到想要的答案!

BFE.devAI解答 - JavaScript 代码题
87. 返回最长的不重复子字符串

解答:

可以使用滑动窗口的思路解决此题。维护一个窗口,初始值为字符串的第一个字符,然后依次向右移动窗口,如果当前字符不在窗口中,则将其加入窗口,更新最长子字符串;如果当前字符已经在窗口中,则将窗口左边界移动到重复字符的下一个位置,继续移动窗口直到遍历完整个字符串。

JavaScript代码如下:

function longestUniqueSubstr(str) {  let left = 0, right = 0;  let maxLen = 0, maxStr = '';  const windowSet = new Set(); // 维护窗口中的字符集合  while (right < str.length) {    if (!windowSet.has(str[right])) {      // 如果当前字符不在窗口中,则将其加入窗口      windowSet.add(str[right]);      if (right - left + 1 > maxLen) {        // 更新最长子字符串        maxLen = right - left + 1;        maxStr = str.slice(left, right + 1);      }      right++; // 右侧指针向右移动    } else {      // 如果当前字符已经在窗口中,则将窗口左边界移动到重复字符的下一个位置      windowSet.delete(str[left]);      left++; // 左侧指针向右移动    }  }  return maxStr;}

时间复杂度为 O(n),空间复杂度为 O(min(m, n)),其中 m 是字符集大小,n 是字符串长度。在本题的情况下,字符集大小为常数,因此时间和空间复杂度均为 O(n)。

针对可优化的部分,可以使用哈希表来代替 Set 来记录窗口中的字符出现次数,可以进一步减小空间复杂度。