题解 | #最长的括号子串#
最长的括号子串
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; }
#解题#