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;
}
}