题解 | #最长的括号子串#
最长的括号子串
https://www.nowcoder.com/practice/45fd68024a4c4e97a8d6c45fc61dc6ad
<?php
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param s string字符串
* @return int整型
*/
function longestValidParentheses( $s )
{
$maxlen=0;
//记录最长匹配长度
$maxbox=[-1];
//记录的堆栈 记录最后匹配位数 用于计算最大长度
for($i=0;$i<strlen($s);$i++){
if($s[$i]=='('){
//首先判断这一位字数是不是(
array_push($maxbox,$i);
//如果是'(',将这一位的序号入栈,加到maxbox的末尾
}else{
if(count($maxbox)>1){//判断这个括号b的面前有没有一个'('可以让他抵消
array_pop($maxbox);
//如果有就弹出最后一个 因为最后一个不是最后匹配项了
$maxlen=$maxlen>$i-$maxbox[count($maxbox)-1]?$maxlen:$i-$maxbox[count($maxbox)-1];
//如果有就表示可以将最大字符加一位,如果加一位后大于历史记录的最大匹配长度 则用现在的长度替换之前的长度
}else{
$maxbox[count($maxbox)-1]=$i;
//如果没有对应的'('和他抵消 代表到这里匹配失效了 将这一位的序号入栈 算作最后匹配位数 接下来的按照这里序号来的计算长度
}
}
}
return $maxlen;
}
#解题#

查看5道真题和解析