Javascript 动态规划 table,在某些情况下不能像 Python 那样索引二维数组?

Javascript dynamic programming table, can't index 2D array like in Python in some cases?

编辑:其实这里的逻辑是错误的。 我使用 Python3 解决了这个问题,字典更新了最后一个出现字母的索引。在动态规划术语中,它类似于 L.I.S(最长递增子序列)。

如果有人知道如何在不使用字典的情况下解决这个问题,请发表评论,因为我在学校学过 DP,而那些课程只使用数组,所以只用数组应该是可能的。

原问题:

我正在尝试Leetcode,3.无重复字符的最长子串

我可以在 Python 为动态规划制作 2D table 中解决这个问题。

但是在我刚接触的 JavaScript 中,我遇到了一个错误。

evalmachine.<anonymous>:41
                var top = T[i-1][j]
                                ^

TypeError: Cannot read property '1' of undefined
    at lengthOfLongestSubstring (evalmachine.<anonymous>:4

我的代码:

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    //empty string
    if (s.length <= 0){
        return 0
    }
    //initialize dict
    var dict = {};
    //initialize 2D table T
    var T = new Array(s.length)
    for (var i = 0; i<s.length; i++){
        T[i] = new Array(s.length);
    }
    
    //base cases are diagonals
    for (var i = 0; i < T.length; i++){
        for (var j=0; j<T.length; j++){
            if(i==j){
                T[i][j] = 1;
            }
            else{
                T[i][j] = 0;
            }
        }
    }
    //put base case in dict
    //dict[s[0]]=1
    for (var i=0; i < s.length; i++){
        for (var j=i+1; j<s.length; j++){
            var row_char = s.charAt(i);
            var col_char = s.charAt(j);
            if (row_char==col_char){
                T[i][j] = 1;
            }
            else{
                //console.log("j",j,T)
                var left = T[i][j-1]
                console.log(left)
                var top = T[i-1][j] 
                console.log(top)
                var bigger = Math.max(left,top);
                T[i][j] = bigger + 1
            }
        }
    }
    //iterate each row to get max
    var high = Number.MIN_SAFE_INTEGER;
    
    for (var i = 0; i < s.length; i++){
        if(T[i][s.length-1] > high){
            high = T[i][s.length-1];
        } 
    }
    
    return high;
    
};

它让我用 0 和 1 索引的基本情况填充 table,例如 T[i][j],然后抱怨这样的索引以获得我不理解的值。

我看了这个:How to get value at a specific index of array In JavaScript? 但它并没有真正说明什么不同。

//put base case in dict 评论之后的循环的第一次迭代中 i0

然后您将尝试访问 T[i-1][j],这相当于 T[-1][j]

因为 T 没有 -1 索引,T[-1] 解析为 undefined,您尝试访问索引 [j] 并且您得到你看到的错误。