美文网首页
leetcode-3.无重复字符的最长子串

leetcode-3.无重复字符的最长子串

作者: 简简天天 | 来源:发表于2020-02-06 15:49 被阅读0次

    3.无重复字符的最长子串
    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
    示例 1:
    输入: "abcabcbb"
    输出: 3
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
    示例 2:
    输入: "bbbbb"
    输出: 1
    解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
    示例 3:
    输入: "pwwkew"
    输出: 3
    解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
    请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

    • 方法一
    class Solution
    {
        /**
         * 3. 无重复字符的最长子串
         * @param string $s
         * @return int
         */
        public function lengthOfLongestSubstring($s)
        {
            // 字符串拆分成数组
            $len = strlen($s);
            if($len == 0 || $len == 1){return $len;}
            $arr = str_split($s);
            $maxLen = 1; // 假设最大长度为1
            // 遍历找出不子串并计算字
            for ($i = 0; $i < $len; $i++) {
                $tmpArr = [];
                for ($j = $i; $j < $len; $j++) {
                    if (in_array($arr[$j], $tmpArr)) {
                        $maxLen = count($tmpArr) > $maxLen ? count($tmpArr) : $maxLen;
                        break;
                    } else {
                        $tmpArr[] = $arr[$j];
                    }
                }
                if($j == $len){
                    $maxLen = count($tmpArr) > $maxLen ? count($tmpArr) : $maxLen;
                    break;
                }
            }
            // 返回最大长度
            return $maxLen;
        }
    }
    $solution = new Solution();
    $s = 'pwwkew';
    print_r($solution->lengthOfLongestSubstring($s));
    
    • 方法二
    class Solution
    {
        /**
         * 3. 无重复字符的最长子串
         * @param string $s
         * @return int
         */
        public function lengthOfLongestSubstring($s){
            $len = strlen($s); // 字符串长度
            if(($len == 0) || ($len == 1)){
                return $len;
            }
            $maxLen = 0; // 初始化最长字串长度为0
            $maxStr = ''; // 初始化最长字串
            for($i = 0; $i < $len; $i++){
                $res = strpos($maxStr, $s[$i]);
                $maxStr .= $s[$i];
                if($res !== false){
                    $maxStr = substr($maxStr, $res + 1);
                }
    
                $maxLen = $maxLen > strlen($maxStr) ? $maxLen : strlen($maxStr);
            }
            return $maxLen;
        }
    }
    $solution = new Solution();
    $s = 'pwwkew';
    print_r($solution->lengthOfLongestSubstring($s));
    
    • 方法三
    class Solution
    {
        /**
         * 3. 无重复字符的最长子串
         * @param string $s
         * @return int
         */
           public function lengthOfLongestSubstring($s){
            $len = strlen($s);
            if($len == 0 || $len == 1){
                return $len;
            }
            $maxLen = 0;
            $i = $j = 0;
            $arr = [];
            while ($i < $len - $maxLen && $j < $len) {
                if (isset($arr[$s[$j]])) { // 数组中已经存在$s[$j]
                    unset($arr[$s[$i]]);
                    $i++;
                } else { // 数组中不存在$s[$j],放到$arr
                    $arr[$s[$j]] = $j;
                    $j++;
                    if ($j - $i > $maxLen) {
                        $maxLen = $j - $i;
                    }
                }
            }
            return $maxLen;
        }
    }
    $solution = new Solution();
    $s = 'pwwkew';
    print_r($solution->lengthOfLongestSubstring($s));
    
    • 方法四
    class Solution
    {
        /**
         * 3. 无重复字符的最长子串
         * @param string $s
         * @return int
         */
            public function lengthOfLongestSubstring($s){
           $len = strlen($s);
           if(($len == 0) || ($len == 1)){
               return $len;
           }
           $findStr = '';
           for($i=0;$i<$len;$i++){
               $pos = strrpos($findStr, $s[$i]);
               if($pos!==false){
                   $findStr=substr($findStr,$pos+1);
               }
               $findStr.= $s[$i];
               $lens[] = strlen($findStr);
           }
           return max($lens)?:0;
    
       }
    }
    $solution = new Solution();
    $s = 'pwwkew';
    print_r($solution->lengthOfLongestSubstring($s));
    
    • 方法五
    class Solution
    {
        /**
         * 3. 无重复字符的最长子串
         * @param string $s
         * @return int
         */
    public function lengthOfLongestSubstring($s){
            $len = strlen($s);
            if($len ==0 || $len == 1){
                return $len;
            }
            $tempStr = '';
            $maxLen = $length = 0;
            for($i = 0; $i < $len; $i++){
                $pos = strpos($tempStr, $s[$i]);
                $tempStr .= $s[$i];
                if ($pos !== false){
                    $tempStr = substr($tempStr, $pos + 1);
                    $length = strlen($tempStr);
                }else{
                    $length++;
                    if($length > $maxLen){
                        $maxLen = $length;
                    }
                }
            }
            return $maxLen;
        }
    }
    $solution = new Solution();
    $s = 'pwwkew';
    print_r($solution->lengthOfLongestSubstring($s));
    
    • 方法六
    class Solution
    {
        /**
         * 3. 无重复字符的最长子串
         * @param string $s
         * @return int
         */
    public function lengthOfLongestSubString($s){
            $len = strlen($s);
            if($len == 0 || $len == 1){
                return $len;
            }
            $map = [];
            $maxLen = $left = 0;
            for($i = 0; $i < $len; $i++){
                if(array_key_exists($s[$i],$map)){
                    $left = max($left,$map[$s[$i]] + 1);
                }
                $map[$s[$i]] = $i;
                $maxLen = max($maxLen,$i-$left+1);
            }
            return $maxLen;
        }
    }
    $solution = new Solution();
    $s = 'pwwkew';
    print_r($solution->lengthOfLongestSubstring($s));
    
    • 结果
      3

    相关文章

      网友评论

          本文标题:leetcode-3.无重复字符的最长子串

          本文链接:https://www.haomeiwen.com/subject/vmhuxhtx.html