javascript - 非重复字符的最长子串javascript

题目是“给定一个字符串,找出最长的不重复字符的非重复子串”。例如,为什么返回我的代码不适用于字符串“dvdf”,我有点难过。这是我的代码:

function lengthOfLongestSubstring(check) {
    var letters = check.split("");
    var max = 0;
    var result = [];
    for (var i = 0; i < letters.length; i++) {
        var start = i
        if (result.indexOf(letters[i]) === -1) {
            result.push(letters[i])
        } else {
            i = i - 1
            result = []
        }
        if (max === 0 || max < result.length) {
            max = result.length
        }
    }
    return max
}

最佳答案

此实现为 "dvdf" 提供了正确的结果。

它将字符添加到 current_string 而没有重复。当您发现重复项时,将 current_string 剪切到重复项的位置。 maxcurrent_string 在任何时候的最大长度。这个逻辑对我来说似乎是正确的,所以我认为它是正确的。

function lengthOfLongestSubstring(string) {
    var max = 0, current_string = "", i, char, pos;

    for (i = 0; i < string.length; i += 1) {
        char = string.charAt(i);
        pos = current_string.indexOf(char);
        if (pos !== -1) {
            // cut "dv" to "v" when you see another "d"
            current_string = current_string.substr(pos + 1);
        }
        current_string += char;
        max = Math.max(max, current_string.length);
    }
    return max;
}

lengthOfLongestSubstring("dvdf"); // 3

每一轮current_string的值为"", "d", "dv", "vd", "vdf"

https://stackoverflow.com/questions/43002447/

相关文章:

list - 我怎样才能找到一个列表包含在任何元素中的另一个列表?

visual-studio-code - VS Code 安装 Visual Studio Code

java - PaseclCase 字符串转大写,下划线分隔

clojure - 如何比较向量中连续元素的值以进行过滤?

python - 如何将三个列表转换为字典,其中键取自前两个列表的笛卡尔积,值取自第三个列表

nuxt.js - Nuxt : Difference nuxtServerInit vs Mddl

javascript - 在javascript中以毫秒为单位获取当前的unix时间

vue.js - 无法使用 vue-html2pdf 将 HTML 代码转换为 PDF

typescript - 导入 *.svg 模块引发 Typescript 错误 : "Cannot

java - 使用 nextInt() 方法后使用 nextLine() 方法