使用栈判断是否是有效的括号
题来源于力扣: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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。