题解 | #最长的括号子串#

最长的括号子串

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;

}



#解题#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务