給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。
實例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