前言
提示:以下是本篇文章正文内容,编程语言为Java
一、题目描述
给定一个用字符串展示的化学公式,计算每种元素的个数。
规则如下:
- 元素命名采用驼峰命名,例如 Mg
- () 代表内部的基团,代表阴离子团
- [] 代表模内部链节通过化学键的连接,并聚合
例如:H2O => H2O1 Mg(OH)2 => H2Mg1O2
示例 1:
输入:
- 化学公式的字符串表达式,例如:K4[ON(SO3)2]2 。
输出:
- 元素名称及个数:K4N2O14S4,并且按照元素名称升序排列。
链接:化学公式解析
二、解题思路
该题和 字符串解码 相似,我们把输入的字符串反转,其格式和字符串解码就非常相似了。本题相对比较复杂,步骤更多,详细可以看注释。
三、示例代码
import java.util.*;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// 反转之后的字符串长这样: 2]2)3OS(NO[4K
String s = new StringBuffer(sc.nextLine()).reverse().toString();
Deque<String> st = new LinkedList<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
//反转了,所以不是 左括号 就直接入栈
if (c != '[' && c != '(') {
st.push(Character.toString(c)