给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足:
左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
/**
* @param String $s
* @return Boolean
*/
//考验入栈出栈相关知识
function isValid($s)
{
//字典
$dictionary = [
')' => '(',
'}' => '{',
']' => '['
];
$stack = [];
$arr = str_split($s);
foreach ($arr as $item)
{
if(!empty($dictionary[$item]))
{
//例如[()]
//利用栈后进先出的特点,当循环到‘)’进行出栈时,对应的栈的顶点为‘(’
if(!empty($stack[0]) && $stack[0] == $dictionary[$item])
{
array_shift($stack);
}
else
{
return false;
}
}
else
{
//如果为左括号就入栈
//栈的特性,后进先出,会在顶部
array_unshift($stack,$item);
}
}
//如果栈中无值代表全匹配
if(empty($stack))
{
return true;
}
else
{
return false;
}
}