发布于 5年前

PHP 版 LeetCode 代码实现——3. Longest Substring Without Repeating Characters (无重复字符的最长子串)

题目描述

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

题解

class Solution {

    /**
     * @param String $s
     * @return Integer
     */
    function lengthOfLongestSubstring($s) {
        if(empty($s)){
            return 0;
        }

        $arrStr = str_split($s);
        $num = count($arrStr);
        $option = array();
        $sum = 0;

        for($i = 0; $i < $num; $i++){
            if(in_array($arrStr[$i] ,$option)){
                $flag = count($option);
                foreach($option as $key => $value){
                    if($value == $arrStr[$i]){
                       unset($option[$key]);
                       break;
                    }
                    unset($option[$key]);
                }

                $sum = ($sum < $flag) ? $flag : $sum;
            }

            $option[] = $arrStr[$i];
        }

        $outPut = count($option) > $sum ? count($option) : $sum;
        return $outPut;
    }
}
class Solution {

    /**
     * @param String $s
     * @return Integer
     */
    function lengthOfLongestSubstring($s) {
        $max = '';
        $maxLen = 0;
        $strLen = strlen($s);
        for ($i=0; $i < $strLen ; $i++) {
            if(strpos($max,$s[$i])===false){
                $max .= $s[$i];
            }else{
                if(strlen($max)>$maxLen){
                    $maxLen = strlen($max);
                    $max = substr(strrchr($max, $s[$i]), 1);
                    $max .= $s[$i];
                }else{
                    $max = substr(strrchr($max, $s[$i]), 1);
                    $max .= $s[$i];
                }
            }
        }
        if(strlen($max)>$maxLen){
            $maxLen = strlen($max);
        }

        return $maxLen;
    }
}
class Solution {

    /**
     * @param String $s
     * @return Integer
     */
    function lengthOfLongestSubstring($s) {
        $len = strlen($s); //总长度
        if ($len > 0) {
            $max = 1;
        } else {
            $max = 0;
        }

        for($i = 0; $i < $len; $i++)
        {
            $tmp = [$s[$i]];
            for($j = $i+1;$j<$len;$j++)
            {
                if(!in_array($s[$j], $tmp)){
                    $tmp[] = $s[$j];
                    $num = count($tmp);
                    if ($num > $max){
                        $max = $num;
                    }
                } else {
                    break;
                }
            }
        }
        return $max;
    }
}

>>> PHP 版 LeetCode 代码实现——总目录

©2020 edoou.com   京ICP备16001874号-3