726. Number of Atoms
给一串字串formula代表一个化学公式
每个原子都是大写开头的
原子后面会接它的个数 EX:H2
或是有括号 EX: (H2Mg3)2
接的数字会大于1
请根据formula回传每个原子的数量
用字串来表示
格式为:原子1数量原子2数量....
并且按照字母来排序
思路:
从formula最后一个元素开始处理到第一个元素
mul纪录括号后面的数字 EX:(HO)2 这个2
并用stack来记录mul
atomnum来记录原子的数目 EX:H2 这个2
建立一个hash table纪录每个元素出现的次数
接着会分4种情况
(1) ')' : 直接略过
(2) '1'~'9' :
一直找到非数字出现,并记录这个数字:num
接着看下一个元素是不是')'
是的话mul*num,并且记录到stack
不是的话那就表示遇到原子了
就把atomnum=num
(3) '(' :
如果stack里有东西,把stack的最后一个数字pop出来,并且mul/=该数字
(4) 英文字母:
一直处理到大写出来,可以得到原子的名字
原子的数量=mul*atomnum,加到hash table里面
并把atomnum=1
最后就按照字母顺序去排列
就可以得到答案了
golang code:
type Atom struct {
name string
num int
}
func countOfAtoms(formula string) string {
stack := make([]int, 0)
i, mul, AtomNum := len(formula)-1, 1, 1
rec := make(map[string]int)
atom := []Atom{}
var res strings.Builder
for i > -1 {
if formula[i] >= '0' && formula[i] <= '9' {
tmp := i
for formula[tmp] >= '0' && formula[tmp] <= '9' {
tmp