題目連結(jié):
題目意譯:
給定一個字串 formula 代表著一個化學(xué)式,回傳每一種元素的數(shù)目。
每一種元素都會以一個大寫字母作為開頭,並接著零個或多個小寫字母,代表著其名稱。
如果數(shù)目值大於 1,則一個或多個數(shù)字將會跟在名稱後面代表著其數(shù)目。如果數(shù)目恰好為 1,則不會有數(shù)字出現(xiàn)。
例如說,"H2O" 和 "H2O2" 是可能出現(xiàn)的,但 "H1O2" 絕對不會出現(xiàn)。
兩個化學(xué)式可以串接在一起形成另一個化學(xué)式。
例如說,"H2O2He3Mg4" 也是一個化學(xué)式。
一個以一對括號框住的化學(xué)式,並接著一個數(shù)目值(可加可不加)也同樣是一個化學(xué)式。
例如說,"(H2O2)" 和 "(H2O2)3" 也是化學(xué)式。
回傳以一個字串表示的所有種類元素之?dāng)?shù)目,其格式為:第一個元素名稱(以字典序排序),緊接著其數(shù)目值(若該值大於 1);再接著第二個元素名稱,緊接著其數(shù)目。以此類推。
測資之生成滿足輸出的所有數(shù)字都可以被一個 32 位元整數(shù)所容納。
限制:
1 ≦ formula.length ≦ 1000
formula 由英文字母、數(shù)字、'(' 和 ')' 所組成。
formula 必定合法。
範(fàn)例測資:
範(fàn)例 1:
輸入: formula = "H2O"
輸出: "H2O"
解釋: 各種元素數(shù)量為 {'H': 2, 'O': 1}。
範(fàn)例 2:
輸入: formula = "Mg(OH)2"
輸出: "H2MgO2"
解釋: 各種元素數(shù)量為 {'H': 2, 'Mg': 1, 'O': 2}。
範(fàn)例 3:
輸入: formula = "K4(ON(SO3)2)2"
輸出: "K4N2O14S4"
解釋: 各種元素數(shù)量為 {'K': 4, 'N': 2, 'O': 14, 'S': 4}。
解題思維:
又是一題括號配對的變化題型(如
昨天的題目),這次堆疊(Stack)頂端要紀(jì)錄的東西變成了目前看到的各種元素的個數(shù)。而一旦看到右括號,則將頂端(代表這一對括號裡看到的元素)移出來並將其中每一種元素乘以緊接在後的數(shù)字(如果有的話)。然後再跟「下一個」頂端(如果存在的話)合併。
最後堆疊會剩恰好一個元素,而其即為所求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。