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

mpe*_*pen 3 c# algorithm

给出类似的输入

a { b c d { e f } g }
Run Code Online (Sandbox Code Playgroud)

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

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

Jon*_*eet 8

而不是尝试修改顶部元素,为什么不将保留在int变量中.

  • 当您看到一个左大括号时,将"计数到目前为止"推入堆栈,并将计数设置为0.
  • 当你看到一封信时,增加你的"计数到目前为止"
  • 当你看到一个右大括号时,用你的计数做你需要的任何事情,并弹出堆栈以获得新的"计数到目前为止"的值

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

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

这可能会略微降低效率,但我认为它实际上更优雅.