此题主要考察栈的操作
栈(后进先出(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);
输出结果:

网友评论