美文网首页
最长不含有重复字符的子串

最长不含有重复字符的子串

作者: yo调调 | 来源:发表于2019-06-07 00:46 被阅读0次
    问题:

    输入一组字符串,字符串中含有重复字符,求最大不重复的子字符串长度。

    描述:

    输入的字符串为 abcabcdefghabe 最大和的连续子数组为 abcdefgh 其最大长度为8。

    思路:

    把第一个元素设为开始位置,循环遍历字符串,记录下所有元素所在的位置下标,一直到重复字符出现,记录长度,然后把开始位置改为上一个重复字符所在位置的后面,继续遍历,重复字符出现、记录长度、开始位置下移,最后比较长度,取长的那个,直到找出最长的子串。

    代码很简单:

    <?php
    
    class Algorithm
    {
    
        public function lengthOfNonRepeatingSubStr($str): int
        {
            $lastPosition = [];
            $start = 0;
            $maxLength = 0;
            for ($i = 0; $i < strlen($str); $i++) {
                if (isset($lastPosition[$str{$i}])) {
                    if ($lastPosition[$str{$i}] > $start) {
                        $start = $lastPosition[$str{$i}] + 1;
                    }
                }
                if ($i - $start + 1 > $maxLength) {
                    $maxLength = $i - $start + 1;
                }
                $lastPosition[$str{$i}] = $i;
            }
            return $maxLength;
        }
    
    }
    
    $algorithm = new Algorithm();
    echo $algorithm->lengthOfNonRepeatingSubStr('aabcdeefgefgabcdefgihrtnmeuig'); //13
    

    相关文章

      网友评论

          本文标题:最长不含有重复字符的子串

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