2010-10-23 37 views
3

鑑於像不錯的方式來存儲大括號之間的元素數量?

a { b c d { e f } g } 

我想分析它一個令牌在時刻(字母或支架)的輸入。當我點擊第一個大括號}時,我需要知道自從最後一個大括號(e和f = 2)以來有多少個元素。然後當我在那之後擊中那個,我需要4(b,c,d,g)。

抓取令牌1是很容易的,但是...我不知道如何計算它們。我正在考慮Stack<int>,但我不能修改頂部元素來增加它?

+0

在這種情況下,大括號外的* a *應該被忽略嗎? – 2010-10-23 06:11:38

+0

@Oyvind:在這個假設的情況下,是的。在實踐中...我想我會有一個隱含的開始和結束大括號。 – mpen 2010-10-23 06:16:15

回答

8

而不是試圖修改頂部元素,爲什麼不保留一個只是在int變量。

  • 當你看到開括號,把你「至今算」到堆棧中,且計數設置爲0。
  • 當你看到一個字母,您增加「數到目前爲止」
  • 當你看到一個右括號,做任何你需要與計數,並彈出堆棧,以獲得新的「至今算」值

編輯:如果你想要把所有的狀態在棧本身,你總是可以把頂層元素想象成一個變量,它被p操作彈出式增量推送。在這一點上,操作是:

  • 開括號:推0
  • 信:彈出式增量推
  • 閉括號:流行,使用價值但要它消失永遠

這可能效率稍低,但我認爲它更優雅。

+0

啊!當然。聰明!謝謝Skeet先生! – mpen 2010-10-23 06:15:25

+0

我在想一個使用遞歸方法的解決方案,它可以工作,但我認爲這是一個更好的解決方案,因爲它更簡單,並且可讀性應該更好。 – 2010-10-23 06:22:11

+0

在發佈此答案之前,我開始使用彈出式增量推送解決方案,但實際上我發現它不太優雅。事實證明,能夠使用最高計數而不必偷看:)是很好的 – mpen 2010-10-23 06:49:09

相關問題