力扣题-使用栈判断是否是有效的括号

使用栈判断是否是有效的括号

题来源于力扣:https://leetcode-cn.com/probl...

思路:
  • 遇见左字符,将左字符入栈
  • 遇见右字符:

    • 如果栈是空的,说明括号无效
    • 如果栈不为空,将栈顶字符出栈,与右字符之匹配
    • 如果左右字符不匹配,说明括号无效
    • 如果左右字符匹配,继续扫描下一个字符
  • 所有字符扫描完毕后:

    • 栈为空,说明括号有效
    • 栈不为空,说明括号无效
require 'Stack.php';
class Solution {

    protected static $solution = [
        '(' => ')',
        '{' => '}',
        '[' => ']'
    ];
    /**
     * 题目来源力扣
     * https://leetcode-cn.com/problems/valid-parentheses/
     * 判断是否是有效的括号
     * @param String $s
     * @return Boolean
     */
    public function isValid($s) {
        $stack = new Stack();
        $len = strlen($s);
        for($i=0;$i<$len;$i++){
            $char = $s[$i];
            if (in_array($char,array_keys(self::$solution))){
              // 入栈。左字符进行入栈,为什么是左字符,如果第一个是右字符的话,那肯定不是有效的括号
                $stack->push($char);
            }else{
                if($stack->isEmpty()) return false;
                $left = $stack->pop();
                if($char !== self::$solution[$left]) return false;
            }
        }
        return $stack->isEmpty();
    }
}


$solution = new Solution();
$ret = $solution->isValid('([{]}])');
var_dump($ret);

源代码下载:gitee

你可能感兴趣的:(php,栈)