【问题标题】:Parenthesis/Brackets Matching and Maximum Elements using Stack algorithm使用堆栈算法的括号/括号匹配和最大元素
【发布时间】:2021-10-24 14:18:25
【问题描述】:

问题:假设我们希望使用堆栈来处理这个表达式 ( [ ( { [ ] [ ] } ( ( ( ) ) ) ) { } ] )。任何时候栈上的最大元素数是多少?

我了解堆栈以 LIFO 顺序运行,因此我不确定如何将其与最大元素数相匹配,以及这与表达式有何关系。这个问题对我来说不清楚。请问你怎么看?

我试图回答它并得到 9,但根据我得到的答案,我发现任何时候堆栈上的最大元素数是 6。

【问题讨论】:

    标签: data-structures stack


    【解决方案1】:

    如果你有一个左括号,你把它放在堆栈上。如果您有一个与堆栈顶部的左括号匹配的右括号,则将该括号从堆栈中弹出,否则放入堆栈。在这个表达式中,堆栈看起来像这样:

    • (
    • ( [
    • ( [ (
    • ( [ ( {
    • ( [ ( { [
    • ( [ ( {
    • ( [ ( { [
    • ( [ ( {
    • ( [ (
    • ( [ ( (
    • ( [ ( ( (
    • ( [ ( ( ( (
    • ( [ ( ( (
    • ( [ ( (
    • ( [ (
    • ( [
    • ( [ {

    【讨论】:

    • 谢谢,但是你怎么能得出结论,你最多可以有 6 个元素呢?鉴于堆栈只有推送和弹出操作,您如何将当前添加到堆栈的括号与先前添加的括号匹配,这意味着您不能在堆栈的元素之间进行搜索?
    • 每次操作后只需检查堆栈中的元素数。 State ( [ ( ( ( ( 有 6 个元素,这是最大值(基于您帖子中的表达)。使用堆栈时,您只能访问顶部的元素,这就足够了。您可以检查此括号是否与表达式中的匹配。
    • 谢谢!我认为元素是指数字!那么,这里的元素是指括号吗?
    • 是的,我是这么理解的。
    • 听起来正确。我只是对元素的含义感到困惑。再次感谢您。
    猜你喜欢
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多