有这样一个题,说是有一个字符串,是由"(){}[]"这样的6个里面的字符组成,如果字符串总是顺序的,类似:
()
([])
({[]})
[()]
就表示true,否则false/
请你设计一个方法去实现。
这道题如果你学过数据结构里的栈,那么解题就容易了、
从第一个字符开始,其实只要是( { [ 也就是括号的左括号的话,后面的字符就有可能和我们的上一个括号配对,但是如果是右括号,那这时我们就要和上一个符号比较,看是不是配对的,如果配对,表示成功,这时弹出就行。
如果不配对那就是说明闭合失败返回false.另外还得清除如果此时栈为空,那就没得比较,直接false.
<?php
function test($s){
$stack = [];
for($i=0;$i<strlen($s);$i++){
if ($s[$i] == "(") {
$push = ")";
array_unshift($stack, $push);
}elseif ($s[$i] == "{") {
$push = "}"
array_unshift($stack, $push);
}elseif ($s[$i] == "[") {
$push = "]";
array_unshift($stack, $push);
}else{
//right need to compare
if (empty($stack)) {
return false;
}else{
if ($s[$i] != array_shift($stack)) {
return false;
}
}
}
}
return empty($stack);
}