閱讀量終於破萬了, 不容易啊,不過看到訪問量大的也就那麼幾個,都是比較常見的問題,其他的文章仍然是沒人理採。 不說這了,說說今天做的一個算法提, 頭大啊
題目
給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。
示例 1:
輸入: “abcabcbb”
輸出: 3
解釋: 因爲無重複字符的最長子串是 “abc”,所以其長度爲 3。
示例 2:
輸入: “bbbbb”
輸出: 1
解釋: 因爲無重複字符的最長子串是 “b”,所以其長度爲 1。
示例 3:
輸入: “pwwkew”
輸出: 3
解釋: 因爲無重複字符的最長子串是 “wke”,所以其長度爲 3。
請注意,你的答案必須是 子串 的長度,“pwke” 是一個子序列,不是子串。
具體算法
- 我自己寫的一個,剛看到這個題感覺挺簡單的,結果在做的過程中各種難。我的算法應該是 最差勁的算法了吧
執行用時:24 ms
內存消耗:17.7 MBclass Solution { /** * @param String $s * @return Integer */ function lengthOfLongestSubstring($s) { $len = strlen($s); $arr = []; $arr_len = []; for($i = 0; $i < $len; $i ++){ $a = substr($s,$i, 1); if(end($arr) != $a){ if(in_array($a, $arr)){ $index = array_search($a, $arr); $arr_len[] = $index+1; $arr_len[] = count($arr); $end = end($arr); $arr = array_slice ($arr, $index+1); $arr[] = $a; }else{ $arr[] = $a; } }else{ $arr_len[] = count($arr); $arr[] = $a; $arr = array(end($arr)); } } $arr_len[] = count($arr); return max($arr_len); } }
- 這是別人寫的,這因該是最優解了
執行用時:8 ms
內存消耗:15.1 MBclass Solution { /** * @param String $s * @return Integer */ function lengthOfLongestSubstring($s) { $len = strlen($s); $i = 0; $rIndex = 0;//開始搜索的位置 $result = 0;//子串的長度 while($i < $len){ $pos = strpos($s,$s[$i],$rIndex); //出現重複 if($pos < $i){ //如果匹配的位置小於當前字符的下標,出現重複,搜索位置以重複字符位置開始 $rIndex = $pos+1; } $result = max($result,($i - $rIndex + 1)); $i++; } return $result; } }
這樣一對比,感覺查的不是一個量級的,貼在這羞辱我自己吧
結論
別覺得自己厲害的不行不行的, 這樣一對比,我才知道的我差距啊,不對是不可逾越的鴻溝。
加油吧,看來我是搬磚的料
如果您對這個文章有任何異議,那麼請在文章評論處寫上你的評論。
願大家都能在編程這條路,越走越遠。
努力加油,每一個困難,都會克服我。