php算法題—無重複字符的最長子串

閱讀量終於破萬了, 不容易啊,不過看到訪問量大的也就那麼幾個,都是比較常見的問題,其他的文章仍然是沒人理採。 不說這了,說說今天做的一個算法提, 頭大啊

題目

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。
示例 1:
輸入: “abcabcbb”
輸出: 3
解釋: 因爲無重複字符的最長子串是 “abc”,所以其長度爲 3。
示例 2:
輸入: “bbbbb”
輸出: 1
解釋: 因爲無重複字符的最長子串是 “b”,所以其長度爲 1。
示例 3:
輸入: “pwwkew”
輸出: 3
解釋: 因爲無重複字符的最長子串是 “wke”,所以其長度爲 3。
請注意,你的答案必須是 子串 的長度,“pwke” 是一個子序列,不是子串。

具體算法

  1. 我自己寫的一個,剛看到這個題感覺挺簡單的,結果在做的過程中各種難。我的算法應該是 最差勁的算法了吧
    執行用時:24 ms
    內存消耗:17.7 MB
    class 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);
        }
    }
    
  2. 這是別人寫的,這因該是最優解了
    執行用時:8 ms
    內存消耗:15.1 MB
    	class 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;
        }
    }
    

這樣一對比,感覺查的不是一個量級的,貼在這羞辱我自己吧

結論

別覺得自己厲害的不行不行的, 這樣一對比,我才知道的我差距啊,不對是不可逾越的鴻溝。
加油吧,看來我是搬磚的料

如果您對這個文章有任何異議,那麼請在文章評論處寫上你的評論。
願大家都能在編程這條路,越走越遠。

努力加油,每一個困難,都會克服我。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章