php刷leetCode有效的括号

2019-12-04  本文已影响0人  吕艳凯

此题主要考察栈的操作
栈(后进先出(LIFO))
所有操作都是通过栈顶部的元素来操作的

有效的括号
解题方法 :
遇上(压栈,遇上)出栈,最后检查栈内是否有元素即可

具体代码:

class Code{

    public function isValid($str){
        //字符串拆分为数组
        $arr = str_split($str);
        //定义对应数组
        $arrMap = array('('=>')','['=>']','{'=>'}');
        //定义存栈数组
        $stack = array();
        foreach ($arr as $key => $value) {
            //栈为空压入数组的第一个元素
            if(empty($stack)){
                $stack[] = $value;
            }else{
                //取栈顶
                $strEnd = end($stack);
                //若栈内已存在右括号,则表示无匹配内容
                if(!isset($arrMap[$strEnd])){
                    return false;
                }
                //若栈顶的第一个元素与数组的元素有对应关系出栈
                if($arrMap[$strEnd] == $value){
                    array_pop($stack);
                }else{
                    //若无对应关系,继续入栈
                    $stack[] = $value;
                }
            }
        }

        if($stack === array()){
            return true;
        }

        return false;
    }
    
}
$obj = new Code();
$res = $obj->isValid('({[]})');
var_dump($res);
$res = $obj->isValid('(){}[]');
var_dump($res);
$res = $obj->isValid('(]{}');
var_dump($res);
$res = $obj->isValid('()[');
var_dump($res);

输出结果:


结果
上一篇 下一篇

猜你喜欢

热点阅读