題目:
給定一個字串,請你找出其中不含有重複字元的 最長子串 的長度。
示例 1:
輸入: “abcabcbb”
輸出: 3
解釋: 因為無重複字元的最長子串是 “abc”,所以其長度為 3。
示例 2:
輸入: “bbbbb”
輸出: 1
解釋: 因為無重複字元的最長子串是 “b”,所以其長度為 1。
示例 3:
輸入: “pwwkew”
輸出: 3
解釋: 因為無重複字元的最長子串是 “wke”,所以其長度為 3。
請注意,你的答案必須是 子串 的長度,”pwke” 是一個子序列,不是子串。
解析:
此題當我看到的時候,感覺解法有點多了,官方又說用滑動視窗,我特麼滑不動啊,怎麼辦呢?
還是用萬能的陣列吧,因為HashMap在PHP中就是陣列的體現呀。解釋在程式碼註解上:
解法:
function lengthOfLongestSubstring($s) {
// 邊界條件判斷
if (!isset($s) || strlen($s) == 0) {
return 0;
}
// 定義一個 HashMap ,裝字串中的 索引和值
$array = [];
// 計算的最大長度
$maxlen = 0;
// 開始位置
$index = 0;
for ($i=0; $i < strlen($s); $i++) {
// 在定義的HashMap中檢視 是不是存在字元的map,並且開始位置要小於等於map的值
//
if (isset($array[$s[$i]]) && $index <= $array[$s[$i]]) {
// 成立則讓開始位置等於 map值加 1
$index = $array[$s[$i]] + 1;
} else {
// 在 Map 中沒有,那就計算長度
$maxlen = max($maxlen, $i-$index + 1);
}
// 將每個字元都加進去 Map 中
$array[$s[$i]] = $i;
}
return $maxlen;
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結