有這樣一個題,說是有一個字符串干旁,是由"(){}[]"這樣的6個里面的字符組成炮沐,如果字符串總是順序的争群,類似:
? ? ()
([])
({[]})
[()]
就表示true,否則false/
請你設(shè)計一個方法去實現(xiàn)。
這道題如果你學過數(shù)據(jù)結(jié)構(gòu)里的棧大年,那么解題就容易了换薄、
從第一個字符開始玉雾,其實只要是( { [ 也就是括號的左括號的話,后面的字符就有可能和我們的上一個括號配對轻要,但是如果是右括號复旬,那這時我們就要和上一個符號比較,看是不是配對的冲泥,如果配對驹碍,表示成功,這時彈出就行凡恍。
如果不配對那就是說明閉合失敗返回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);
}