给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
实例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