很好的方法来存储大括号之间的元素数量?

时间:2010-10-23 06:08:49

标签: c# algorithm

给出像

这样的输入
a { b c d { e f } g }

我想在时间(字母或大括号)解析一个标记。当我击中第一个右大括号}时,我需要知道自上一个左大括号(e和f = 2)以来有多少元素。然后当我在那之后击中那个时,我需要4(b,c,d,g)。

逐个抓取代币很容易,但是......我不知道如何计算它们。我在考虑Stack<int>,但我不能修改顶部元素来增加它?

1 个答案:

答案 0 :(得分:8)

为什么不在<{1}}变量中保留那个,而不是尝试修改top元素。

  • 当您看到一个左大括号时,将“计数到目前为止”推入堆栈,并将计数设置为0.
  • 当你看到一封信时,增加你的“计数到目前为止”
  • 当你看到一个结束括号时,你需要做任何你需要的计数,然后弹出堆栈以获得新的“计算到目前为止”值

编辑:如果你想保持堆栈本身的所有状态,你总是可以将顶部元素视为一个变量,通过执行pop-increment-push来改变它。此时,操作是:

  • 打开支撑:按0
  • 信:pop-increment-push
  • 关闭大括号:pop,在你永远消失之前使用你想要的值

效率可能略低,但我认为它实际上更优雅。