首先,沒有第二題,沒有第二題的原因是,JavaScript中根本就沒有那種數據結構,儘管我在playground裡面調試出了正確的結果,但是也許是因為數據結構問題,最終沒能讓我通過。 所以我就拋棄第二題了。 Given a string, find the length of the longest ...
首先,沒有第二題,沒有第二題的原因是,JavaScript中根本就沒有那種數據結構,儘管我在playground裡面調試出了正確的結果,但是也許是因為數據結構問題,最終沒能讓我通過。
所以我就拋棄第二題了。
Given a string, find the length of the longest substring without repeating characters.
給定一個字元串,找出不含有重覆字元的 最長子串 的長度。
例如:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
給定 "abcabcbb"
,沒有重覆字元的最長子串是 "abc"
,那麼長度就是3。
Given "bbbbb"
, the answer is "b"
, with the length of 1.
給定 "bbbbb"
,最長的子串就是 "b"
,長度是1。
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
給定 "pwwkew"
,最長子串是 "wke"
,長度是3。請註意答案必須是一個子串,"pwke"
是 子序列 而不是子串。
題目裡面有幾個點需要註意,首先就是沒有重覆字元,一開始我沒看到,吃了好大的虧。然後就是找到的這個字元串得是給定字元串的子串。
下麵貼出代碼,然後分析一下代碼:
1 var lengthOfLongestSubstring = function(s) { 2 var i, j; 3 var len = s.length; 4 var compareNumber = 0; 5 for (i = 0; i < len - 1; i++) { 6 for (j = i + 1; j < len; j++) { 7 if (s[i] === s[j]) { 8 compareNumber = s.slice(i, j).length > compareNumber ? s.slice(i, j).length : compareNumber; 9 break; 10 } 11 } 12 } 13 if (compareNumber === 0) { 14 compareNumber = len; 15 } 16 return compareNumber; 17 };
這題不難,關鍵判斷條件是遇到第一個相同的字母,則停下。然後判斷新找到子串的長度與之前的最長長度哪一個長,然後令compareNumber等於更長的那個長度。
同時,在取得更長長度之後,退出本輪迴圈,進行下一輪迴圈。防止出現字元重覆的情況。
最後加了一個if語句,單獨判斷一次輸入字元串為空的情況。
總的來說,只能算是一種行之有效,略微粗暴的方式,並不是本題的最優解。