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

2019-06-07  本文已影响0人  yo调调
问题:

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

描述:

输入的字符串为 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
上一篇 下一篇

猜你喜欢

热点阅读