题目链接
栈 +
m
a
p
map
map
class Solution {
public:
string countOfAtoms(string s) {
stack<string> p,q;
map<string,int>mp;
for(int i = 0; i < s.size(); i++)
{
if(s[i] == '(')
{
p.push("(");
continue;
}
int k = i, t = 0;
string cnt = "";
cnt += s[i++];
while(i < s.size() && s[i] >= 'a' && s[i] <= 'z')
{
cnt += s[i];
i++;
}
k = i;
while(i < s.size() && s[i] >= '0' && s[i] <= '9')
{
t = t*10 + s[i] - '0';
i++;
}
if(k == i) t = 1;
if(cnt != ")")
{
p.push(cnt);
string y = to_string(t);
p.push(y);
}
if(cnt == ")")
{
while(p.top() != "(")
{
string x = p.top(); p.pop();
string y = p.top(); p.pop();
int c = stoi(x);
c = c*t;
x = to_string(c);
q.push(x); //数字
q.push(y); //字符
}
p.pop();
while(!q.empty())
{
string x = q.top(); q.pop(); //字符
string y = q.top(); q.pop(); //数字
p.push(x);
p.push(y);
}
}
i--;
}
while(p.size())
{
string x = p.top(); p.pop();
string y = p.top(); p.pop();
int c = stoi(x);
mp[y] += c;
}
string ans = "";
// for(auto& x : mp) cout<<x.first<<" "<<x.second<<endl;
for(auto& x : mp)
{
string a = x.first;
string b = to_string(x.second);
ans += a;
if(b == "1") continue;
ans += b;
}
return ans;
}
};