一个算法题:括号匹配问题。
问:给予一个字符串为:']]][]]]][[[[[[]]]]',请写出程序求出其有多少对'[]'?
一般这种问题都是想让你通过数据结构去处理,仔细回想一下我们学过的数据结构,栈的先进后出是否能处理这个问题?
将字符串遍历,遇到左方括号 '[' 时将其压入栈中,遇到右方括号 ']'时取出栈顶元素匹配,并将对数加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
可以看出,通过栈去实现括号匹配文件时非常清晰简单的。