From f887a8f8f9a332e083a2aa8d3c4be99e8682c1c9 Mon Sep 17 00:00:00 2001 From: chayan das <110921638+Chayandas07@users.noreply.github.com> Date: Sun, 14 Jul 2024 21:07:21 +0530 Subject: [PATCH] Create 726. Number of Atoms --- 726. Number of Atoms | 52 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 726. Number of Atoms diff --git a/726. Number of Atoms b/726. Number of Atoms new file mode 100644 index 0000000..aaf5aa4 --- /dev/null +++ b/726. Number of Atoms @@ -0,0 +1,52 @@ + + +class Solution { +public: + string countOfAtoms(string formula) { + stack> stk; + stk.push(map()); + int n = formula.size(); + for (int i = 0; i < n;) { + if (formula[i] == '(') { + stk.push(map()); + i++; + } else if (formula[i] == ')') { + auto top = stk.top(); + stk.pop(); + i++; + int i_start = i; + while (i < n && isdigit(formula[i])) { + i++; + } + int multiplier = i > i_start ? stoi(formula.substr(i_start, i - i_start)) : 1; + for (auto &p : top) { + stk.top()[p.first] += p.second * multiplier; + } + } else { + int i_start = i; + i++; + while (i < n && islower(formula[i])) { + i++; + } + string element = formula.substr(i_start, i - i_start); + i_start = i; + while (i < n && isdigit(formula[i])) { + i++; + } + int count = i > i_start ? stoi(formula.substr(i_start, i - i_start)) : 1; + stk.top()[element] += count; + } + } + auto &counts = stk.top(); + vector> elements(counts.begin(), counts.end()); + sort(elements.begin(), elements.end()); + string result; + for (auto &p : elements) { + result += p.first; + if (p.second > 1) { + result += to_string(p.second); + } + } + return result; + } +};