LeetCode 726. 原子的数量
给定一个化学式formula
(作为字符串),返回每种原子的数量。
原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字。
如果数量大于 1,原子后会跟着数字表示原子的数量。如果数量等于 1 则不会跟数字。例如,H2O 和 H2O2 是可行的,但 H1O2 这个表达是不可行的。
两个化学式连在一起是新的化学式。例如 H2O2He3Mg4 也是化学式。
一个括号中的化学式和数字(可选择性添加)也是化学式。例如 (H2O2) 和 (H2O2)3 是化学式。
给定一个化学式,输出所有原子的数量。格式为:第一个(按字典序)原子的名子,跟着它的数量(如果数量大于 1),然后是第二个原子的名字(按字典序),跟着它的数量(如果数量大于 1),以此类推。
示例 1:
输入: formula = "H2O" 输出: "H2O" 解释: 原子的数量是 {'H': 2, 'O': 1}。
示例 2:
输入: formula = "Mg(OH)2" 输出: "H2MgO2" 解释: 原子的数量是 {'H': 2, 'Mg': 1, 'O': 2}。
示例 3:
输入: formula = "K4(ON(SO3)2)2" 输出: "K4N2O14S4" 解释: 原子的数量是 {'K': 4, 'N': 2, 'O': 14, 'S': 4}。
类似于之前的“字符串解码”。需要注意的是类似A2BA这样子的化学式。我写的代码如下:
class Solution { public:string countOfAtoms(string formula) {stack<map<string, int>> s;map<string, int> curSet;for (int i = 0; i < formula.size(); ) {if (isupper(formula[i])) {int j = i + 1;string tmp, tmp1;tmp += formula[i];if (j < formula.size() && islower(formula[j])) {tmp += formula[j++];}if (j < formula.size() && isdigit(formula[j])) {while (j < formula.size() && isdigit(formula[j])) {tmp1 += formula[j];j++;}}else {tmp1 = "1";}curSet[tmp] += stoi(tmp1);i = j;}else if (formula[i] == '(') {s.push(curSet);curSet.clear();i++;}else if (formula[i] == ')') {int j = i + 1;string tmp;while (j < formula.size() && isdigit(formula[j])) {tmp += formula[j];j++;}int cnt = stoi(tmp);map<string, int>& top = s.top();for (auto i = curSet.begin(); i != curSet.end(); i++) {top[i->first] += (i->second) * cnt;}curSet = top;s.pop();i = j;}}string res;for (auto i = curSet.begin(); i != curSet.end(); i++) {res += i->first + (i->second != 1? (to_string(i->second)): "");}return res;} };
转载于:https://www.cnblogs.com/hlk09/p/9735103.html
LeetCode 726. 原子的数量相关推荐
- 726. 原子的数量
给定一个化学式formula(作为字符串),返回每种原子的数量. 原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字. 如果数量大于 1,原子后会跟着数字表示原子的数量.如果数量 ...
- LeetCode-726. 原子的数量(python2)
题目链接: 726.原子数量 题目难度:困难 题目描述: 给定一个化学式formula(作为字符串),返回每种原子的数量. 原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字. ...
- LeetCode-726 原子的数量 递归
LeetCode-726 原子的数量 递归 题目链接:LeetCode-726 原子的数量 给你一个字符串化学式 formula ,返回 每种原子的数量 . 原子总是以一个大写字母开始,接着跟随 0 ...
- 原子的数量(容易理解)
题目描述 给定一个化学式formula(作为字符串),返回每种原子的数量. 原子总是以一个大写字母开始,接着跟随0个或任意个小写字母,表示原子的名字. 如果数量大于 1,原子后会跟着数字表示原子的数量 ...
- LeetCode 452. 用最少数量的箭打破气球(贪心)
1. 题目 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标. 由于它是水平的,所以y坐标并不重要,因此只要知道开始和结束的x坐标就足够了. 开始坐标总是小 ...
- LeetCode 447. 回旋镖的数量(哈希map+组合数)
1. 题目 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到 ...
- LeetCode 1020. 飞地的数量(图的BFS/DFS)
文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 给出一个二维数组 A,每个单元格为 0(代表海)或 1(代表陆地). 移动是指在陆地上从一个地方走到另一个地方(朝四个方向 ...
- [LeetCode] 447.回旋镖的数量(Easy)C语言题解
题目 给定平面上 n 对不同的点,"回旋镖" 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序). 找到所有回 ...
- leetcode 452. 用最少数量的箭引爆气球(贪心算法)
在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以纵坐标并不重要,因此只要知道开始和结束的横坐标就足够了.开始坐标总是小于结束坐标. 一 ...
最新文章
- ecshop支持mysql5.5吗,centos5.5 安装配置 ecshop【nginx + php + mysql】
- Intellij IDEA Debug调试技巧
- 怎么修改腾讯视频的昵称
- vim剪切指定行_10 分钟上手 Vim,常用命令大盘点
- 运算符--位移运算符和一些其他运算符
- MYSQL数据库中触发器禁用、启用、查询
- 字符编码方式及大端小端
- sql date时间加减几天几小时
- python通用编码_python2.7的编码的常见解决方案.md
- python必背入门代码-python必背内容有哪些
- 第五讲计算结果的可视化
- Chrome 87 发布,获多年来最大性能提升
- EndNoteX9插入参考文献
- python 实现微信自动回复(自动聊天)
- U-Net论文阅读(逐句翻译+精读)
- NPC 也有了生命?当 ChatGPT 注入游戏你能想象吗
- kafka安装及使用
- FH151C6 Apple Lighting数据线取电\放电芯片苹果OTG取电协议IC芯片
- CCF-CSP认证 历届第一题
- jvm G1 深度分析
热门文章
- spring框架文档学习(包会)
- php去掉内部空格_php中去掉头尾空格3种方法
- vant 下拉框样式_使用 Vue 的 Vant.js List 列表组件实现无限下拉
- 根目录访问php 404,nginx配置后只有根目录首页index.php能访问,其他页面404
- 计算机应用基础随堂,《计算机应用基础》随堂题库
- jquery选择器:与、或逻辑
- mysql 将查询所得结果集的某一字段拼接成字符串
- access导入链接快还是导入表快_Go 语言设计哲学之十三:理解包导入路径的含义...
- linux 显示文字在桌面背景,Linux下Xwindow的字体配置(所谓的字体美化)
- 2020年行政区划代码_2020年南宁市行政区划,了解南宁市有几个区,详细数据