原题链接https://leetcode.com/problems/number-of-atoms/

题目描述

Given a chemical formula (given as a string), return the count of each atom.

An atomic element always starts with an uppercase character, then zero or more lowercase letters, representing the name.

1 or more digits representing the count of that element may follow if the count is greater than 1. If the count is 1, no digits will follow. For example, H2O and H2O2 are possible, but H1O2 is impossible.

Two formulas concatenated together produce another formula. For example, H2O2He3Mg4 is also a formula.

A formula placed in parentheses, and a count (optionally added) is also a formula. For example, (H2O2) and (H2O2)3 are formulas.

Given a formula, output the count of all elements as a string in the following form: the first name (in sorted order), followed by its count (if that count is more than 1), followed by the second name (in sorted order), followed by its count (if that count is more than 1), and so on.

Example 1:

Input:
formula = “H2O”
Output: “H2O”
Explanation:
The count of elements are {‘H’: 2, ‘O’: 1}.

Example 2:

Input:
formula = “Mg(OH)2”
Output: “H2MgO2”
Explanation:
The count of elements are {‘H’: 2, ‘Mg’: 1, ‘O’: 2}.

Example 3:

Input:
formula = “K4(ON(SO3)2)2”
Output: “K4N2O14S4”
Explanation:
The count of elements are {‘K’: 4, ‘N’: 2, ‘O’: 14, ‘S’: 4}.

Note:
All atom names consist of lowercase letters, except for the first character which is uppercase.
The length of formula will be in the range [1, 1000].
formula will only consist of letters, digits, and round parentheses, and is a valid formula as defined in the problem.

思路分析

把给定化学式的原子数目分别统计出来,并返回原子和对应数目组成的字符串。
类似之前做的计算器,都是在于括号的嵌套,可以通过递归或者栈,其实两者思想上差不多啦

下面贴的题解是小陌看了花花酱大神之后的优化版,好多新特性自己还没有去使用的意识,还是用之前本方法,差距呐ヽ(。>д<)p
here are花花酱大神http://zxi.mytechroad.com/blog/string/leetcode-726-number-of-atoms/

AC解

class Solution {
private int i;
public String countOfAtoms(String formula) {
i = 0;
StringBuilder res = new StringBuilder();
Map<String,Integer> map = parse(formula); for(String s:map.keySet())
{
res.append(s);
int number = map.get(s);
if(number > 1)
{
res.append("" + number);
}
} return res.toString();
} public Map<String,Integer> parse(String f)
{
Map<String,Integer> tm = new TreeMap();
while( i<f.length() && f.charAt(i) != ')')
{
if(f.charAt(i) == '(')
{
i ++;
for(Map.Entry<String,Integer> tra : parse(f).entrySet())
{
tm.put(tra.getKey(),tm.getOrDefault(tra.getKey(),0) + tra.getValue());
}
}
else
{
int begin = i ++;
while(i<f.length() && Character.isLowerCase(f.charAt(i)))
{
i ++;
} String atom = f.substring(begin,i);
begin = i;
while(i<f.length() && Character.isDigit(f.charAt(i)))
{
i ++;
} int count = begin < i ? Integer.parseInt(f.substring(begin,i)) : 1;
tm.put(atom,tm.getOrDefault(atom,0) + count);
}
} int begin = ++ i;
while(i<f.length() && Character.isDigit(f.charAt(i)))
{
i ++;
}
if(begin < i)
{
int count = Integer.parseInt(f.substring(begin,i));
for(String s:tm.keySet())
{
tm.put(s,tm.get(s)*count);
}
} return tm;
}
}

Number of Atoms——LeetCode进阶路的更多相关文章

  1. 【LeetCode】726. Number of Atoms 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/number-o ...

  2. [LeetCode] Number of Atoms 原子的个数

    Given a chemical formula (given as a string), return the count of each atom. An atomic element alway ...

  3. LeetCode Number of Atoms

    原题链接在这里:https://leetcode.com/problems/number-of-atoms/description/ 题目: Given a chemical formula (giv ...

  4. 【leetcode】726. Number of Atoms

    题目如下: 解题思路:我用的是递归的方法,每次找出与第一个')'匹配的'('计算atom的数量后去除括号,只到分子式中没有括号为止.例如 "K4(ON(SO3)2)2" -> ...

  5. [Swift]LeetCode726. 原子的数量 | Number of Atoms

    Given a chemical formula (given as a string), return the count of each atom. An atomic element alway ...

  6. Number of Islands——LeetCode

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

  7. 阿里巴巴 web前端性能优化进阶路

    Web前端性能优化WPO,相信大多数前端同学都不会陌生,在各自所负责的站点页面中,也都会或多或少的有过一定的技术实践.可以说,这个领域并不缺乏成熟技术理论和技术牛人:例如Yahoo的web站点性能优化 ...

  8. LeetCode.874-走路机器人模拟(Walking Robot Simulation)

    这是悦乐书的第335次更新,第360篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第205题(顺位题号是874).网格上的机器人从点(0,0)开始并朝北.机器人可以接收三 ...

  9. 瑞柏匡丞谈中国移动app的国际进阶路

    当今3.0互联时代,已然形成了一个移动化,互动化,全球化的完整体系.瑞柏匡丞也在常年与国内外客户的交流沟通中有了自己的些许见解. 国内的移动产业的发展已然非常迅速,但也正是因为各类企业的不断崛起,能够 ...

  10. App开发革命进阶路

    APP开发的成败,或许不是程序编辑的多么完美,界面设计的多么精致,其实这就是一场用户体验的革命. APP的使用场景是移动设备,人机交互以单指手“触点”为主,大段文字输入是交互的禁区.因此,APP带来了 ...

随机推荐

  1. 给Typecho加上心知天气-网页天气插件

    给你的博客添加个知心天气的天气预报,代码看下面 <!-- 知心天气--> <div id="tp-weather-widget" class="navb ...

  2. Java01 - Scanner对象

    简介 之前我们学的基本语法中并没有实现程序和人的交互,但是Java给我们提供了这样一个工具类,我们可以获取用户的输入.java.util.Scanner是Java5的新特征,我们可以通过Scanner ...

  3. 961. 重复 N 次的元素

    地址:https://leetcode-cn.com/problems/n-repeated-element-in-size-2n-array/ <?php /** 在大小为 2N 的数组 A ...

  4. php查询结果汉字乱码解决方法

    问题描述:使用php查询数据显示,显示的结果中所有汉字乱码 问题及解决:这种情况是编码造成的,检查数据库及页面编码是否一致,也可在页面增加: header('Content-Type:text/htm ...

  5. rust学习笔记(7)

    crate 中文是货箱,这是我们编写自己的库或者程序的方式 库 使用rustc可以把一个文件编译为lib rustc --crate-type=lib rary.rs 构建的方式选择lib 编译出来的 ...

  6. rust学习笔记(4)

    流程控制 if if n < 0 { print!("{} is negative", n); } else if n > 0 { print!("{} is ...

  7. mac更新本地时间

    前言 选取苹果菜单 >"系统偏好设置",然后点按"日期与时间". 点按窗口角落处的锁形图标 ,然后输入您的管理员密码以解锁设置. 在"日期与时 ...

  8. Git工作流介绍

    前言 工作流其实不是一个初级主题,背后的本质问题其实是有效的项目流程管理和高效的开发协同约定,不仅是Git或SVN等SCM工具的使用. 集中式工作流 如果你的开发团队成员已经很熟悉Subversion ...

  9. Mac 刷题环境配置

    Mac 刷题环境配置 这篇博文主要记录自己为了更方便的在 Mac 上写算法题,主要是基于 Clion做的一些环境配置:有些操作其实在 Windows ,Linux 下也是通用的,如果看到的小伙伴也可以 ...

  10. 异常的两种处理方式--java进阶day08

    1.异常的默认处理流程 java中,对于异常的默认处理方式是--向上抛出 之前我们说过,异常都是类,当某个程序出错后,就会自动生成该异常对象,而这个异常对象就如同一颗雷 . java的异常默认处理方式 ...