問題:
輸入一組字符串惊搏,字符串中含有重復(fù)字符,求最大不重復(fù)的子字符串長度。
描述:
輸入的字符串為 abcabcdefghabe 最大和的連續(xù)子數(shù)組為 abcdefgh 其最大長度為8勃痴。
思路:
把第一個元素設(shè)為開始位置,循環(huán)遍歷字符串热康,記錄下所有元素所在的位置下標(biāo)沛申,一直到重復(fù)字符出現(xiàn),記錄長度褐隆,然后把開始位置改為上一個重復(fù)字符所在位置的后面污它,繼續(xù)遍歷,重復(fù)字符出現(xiàn)庶弃、記錄長度衫贬、開始位置下移,最后比較長度歇攻,取長的那個固惯,直到找出最長的子串。
代碼很簡單:
<?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