你提到的 public String countOfAtoms(String formula) 是 LeetCode 上的一道经典字符串解析题(LeetCode 726. Number of Atoms)。题目要求解析一个化学式字符串(如 “H2O”、“Mg(OH)2”、“K4(ON(SO3)2)2”),并返回其中每种原子的数量,按字典序排列。

下面是一个完整的 Java 解法,使用 栈 + TreeMap(自动排序) 实现:

import java.util.*;

public class Solution {
public String countOfAtoms(String formula) {
Stack> stack = new Stack();
stack.push(new TreeMap()); // 使用 TreeMap 自动按字典序排序
int i = 0, n = formula.length();

    while (i ());
            i++;
        } else if (c == ')') {
            Map top = stack.pop();
            i++; // 跳过 ')'
            // 解析后面的数字
            int num = 0;
            while (i  entry : stack.peek().entrySet()) {
        sb.append(entry.getKey());
        if (entry.getValue() > 1) {
            sb.append(entry.getValue());
        }
    }
    return sb.toString();
}

}

示例:

  • 输入:“H2O” → 输出:“H2O”
  • 输入:“Mg(OH)2” → 输出:“H2MgO2”
  • 输入:“K4(ON(SO3)2)2” → 输出:“K4N2O14S4”

关键点说明:

  • 使用 栈 来处理嵌套括号。
  • 每一层括号内的原子计数存在一个 Map 中。
  • 遇到 ) 时,弹出当前层,乘以后面的数字,加到上一层。
  • 使用 TreeMap 保证最终输出按原子名字典序排列。

如果你需要 Python 版本或其他语言实现,也可以告诉我!

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐