實際上這里的邏輯是錯誤的。我使用 Python3 和一個字典解決了這個問題,該字典更新了看到字母的最后一個索引。在動態(tài)規(guī)劃術語中,它類似于 LIS(最長遞增子序列)。如果有人知道如何在不使用字典的情況下解決這個問題,請發(fā)表評論,因為我在學校學過DP,這些課程只使用了數(shù)組,所以只用數(shù)組就可以了。原問題:我正在嘗試 Leetcode,3. 沒有重復字符的最長子串。我可以用 Python 制作一個用于動態(tài)編程的二維表來解決這個問題。但在我不太熟悉的 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 索引的基本情況填充表T[i][j],但然后抱怨這樣的索引以獲得我不理解的值。我看了這個:How to get value at a certain index of array In JavaScript? 但它實際上并沒有說什么不同。
Javascript動態(tài)編程表,在某些情況下無法像Python中那樣索引2D數(shù)組?
皈依舞
2023-06-29 21:13:22