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

相关文章
相关标签/搜索