問:給予一個字符串為:']]][]]]][[[[[[]]]]',請寫出程序求出其有多少對'[]'?
一般這種問題都是想讓你通過數據結構去處理,仔細回想一下我們學過的數據結構,棧的先進后出是否能處理這個問題?
將字符串遍歷,遇到左方括號 '[' 時將其壓入棧中,遇到右方括號 ']'時取出棧頂元素匹配,並將對數加1,這樣最后我們就求出來能有多少對方括號了。
棧的示意圖:
流程圖:
通過分析,我們使用PHP編碼實現這個功能:
//括號匹配問題 $str = ']]][]]]][[[[[[]]]]'; //初始化一個棧 $stack = new SplStack(); $len = strlen($str); $count = 0; for ($i = 0; $i < $len; $i++) { if ($str[$i] == '[') { $stack->push($str[$i]); } elseif ($str[$i] == ']') { if (!$stack->isEmpty() && $stack->pop() == '[') { $count++; } } } unset($stack); echo $count;//5
可以看出,通過棧去實現括號匹配文件時非常清晰簡單的。