问题:
输入一组字符串,字符串中含有重复字符,求最大不重复的子字符串长度。
描述:
输入的字符串为 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
网友评论