一個算法題:括號匹配問題。


問:給予一個字符串為:']]][]]]][[[[[[]]]]',請寫出程序求出其有多少對'[]'?

一般這種問題都是想讓你通過數據結構去處理,仔細回想一下我們學過的數據結構,棧的先進后出是否能處理這個問題?
將字符串遍歷,遇到左方括號 '[' 時將其壓入棧中,遇到右方括號 ']'時取出棧頂元素匹配,並將對數加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

可以看出,通過棧去實現括號匹配文件時非常清晰簡單的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM