LeetCode2

無重複字符的最長子串

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。

實例1:數組

輸入: "abcabcbb"
輸出: 3 
解釋: 由於無重複字符的最長子串是 "abc",因此其長度爲 3。複製代碼

實例2:bash

輸入: "bbbbb"
輸出: 1
解釋: 由於無重複字符的最長子串是 "b",因此其長度爲 1。複製代碼

實例3:ui

輸入: "pwwkew"
輸出: 3
解釋: 由於無重複字符的最長子串是 "wke",因此其長度爲 3。
     請注意,你的答案必須是 子串 的長度,"pwke" 是一個子序列,不是子串。複製代碼


個人答案:spa

class Solution {

    /**
     * @param String $s
     * @return Integer
     * 注意事項  1.空字符串的過濾 2.aab 3.aaaaa 4.dvdf  
     */
    function lengthOfLongestSubstring($s) {
        // 最大字符長度
        $maxLen = 0;
        // 當前循環中字符串長度
        $currentLen = 0;
        // 將字符串轉爲數組
        $sArr = str_split($s);
        // 當前循環中的數組
        $currentArr = [];
        if($s=="") {
            return 0;
        }
        for($i=0;$i<count($sArr);$i++) {
            // 判斷當前循環元素是否已經存在於當前循環的數組中
            if(!in_array($sArr[$i], $currentArr)){
                // 不在的話 將當前循環元素放入當前數組中
                array_push($currentArr, $sArr[$i]);
                // 計算當前數組長度
                $currentLen =count($currentArr);
                // 計算最大長度
                $maxLen= ($currentLen > $maxLen)? $currentLen:$maxLen;
            }else{
                // 找到當前重複元素在此時數組中的鍵
                $currentKey = array_search($sArr[$i],$currentArr);
                // 刪除從開始一直到數組中被重複元素的全部元素
                for($j=0;$j<=$currentKey;$j++){
                    unset($currentArr[$j]);
                }
                // 將當前已經重複的元素放入刨去以前被重複的元素
                array_push($currentArr, $sArr[$i]);
            }
        }
        return $maxLen;
    }
}複製代碼

本人菜鳥一枚,無心冒犯,若有更好的解法,歡迎留言評論區!code

相關文章
相關標籤/搜索