力扣726.原子的数量
-
倒序遍历字符串
- d保存括号外倍数
- s存原子类型
- ha存括号外倍数
- cnt存当前原子倍数
- 遇到数字就存在d中
- 遇到) 就将d记录下来入栈
- 遇到( 就栈顶(当前结束的括号的倍数)出栈 cnt /= st.top();
- 遇到字母就记录 当发现大写时 翻转字符串得到原子类型
-
class Solution {public:map<string,int> zz; string countOfAtoms(string formula) {stack<int> ha;string s="",d="";int cnt = 1;for(int i=formula.size()-1;i>=0;i--){char c = formula[i];if(isdigit(c))d = c + d;else if(c == ')'){int v = d == "" ? 1 : stoi(d);d = "";cnt *= v;ha.push(v);}else if(c == '('){cnt /= ha.top();ha.pop();}else{s+=c;if(c>='A'&&c<='Z'){reverse(s.begin(),s.end());zz[s]+=(d==""?1:stoi(d))*cnt; s="",d=""; } }}for(auto i:zz){s+=i.first;if(i.second>1) s+=to_string(i.second);}return s;}};