1. 程式人生 > >Leetcode代碼練習(二)

Leetcode代碼練習(二)

sts compare bre 那種 character span 一次 給定 spa

首先,沒有第二題,沒有第二題的原因是,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語句,單獨判斷一次輸入字符串為空的情況。

總的來說,只能算是一種行之有效,略微粗暴的方式,並不是本題的最優解。

Leetcode代碼練習(二)