423. 从英文中重建数字 : 脑筋急转弯模拟题

简介: 423. 从英文中重建数字 : 脑筋急转弯模拟题

网络异常,图片无法展示
|


题目描述



这是 LeetCode 上的 423. 从英文中重建数字 ,难度为 中等


Tag : 「模拟」、「脑筋急转弯」


给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。


示例 1:


输入:s = "owoztneoer"
输出:"012"
复制代码


示例 2:


输入:s = "fviefuro"
输出:"45"
复制代码


提示:


  • 1 <= s.length <= 10^51<=s.length<=105
  • s[i]["e","g","f","i","h","o","n","s","r","u","t","w","v","x","z"] 这些字符之一
  • s 保证是一个符合题目要求的字符串


模拟



题目要求我们将打乱的英文单词重建为数字。


我们可以先对 s 进行词频统计,然后根据「英文单词中的字符唯一性」确定构建的顺序,最后再对答案进行排序即可。


具体的,zero 中的 z 在其余所有单词中都没出现过,我们可以先统计 zero 的出现次数,并构建 00;然后观察剩余数字,其中 eight 中的 g 具有唯一性,构建 88;再发现 six 中的 x 具有唯一性,构建 66;发现 three 中的 h 具有唯一性(利用在此之前 eight 已经被删除干净,词频中仅存在 three 对应的 h),构建 33 ...


最终可以确定一个可行的构建序列为 0, 8, 6, 3, 2, 7, 5, 9, 4, 1


代码:


class Solution {
    static String[] ss = new String[]{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};
    static int[] priority = new int[]{0, 8, 6, 3, 2, 7, 5, 9, 4, 1};
    public String originalDigits(String s) {
        int n = s.length();
        int[] cnts = new int[26];
        for (int i = 0; i < n; i++) cnts[s.charAt(i) - 'a']++;
        StringBuilder sb = new StringBuilder();
        for (int i : priority) {
            int k = Integer.MAX_VALUE;
            for (char c : ss[i].toCharArray()) k = Math.min(k, cnts[c - 'a']);
            for (char c : ss[i].toCharArray()) cnts[c - 'a'] -= k;
            while (k-- > 0) sb.append(i);
        }
        char[] cs = sb.toString().toCharArray();
        Arrays.sort(cs);
        return String.valueOf(cs);
    }
}
复制代码


  • 时间复杂度:令 mm 为最终答案的长度,LL 为所有英文单词的字符总长度。构建答案的复杂度为 O(L + m)O(L+m);对构建答案进行排序复杂度为 O(m\log{m})O(mlogm)。整体复杂度为 O(m\log{m})O(mlogm)
  • 空间复杂度:O(L + m)O(L+m)


最后



这是我们「刷穿 LeetCode」系列文章的第 No.423 篇,系列开始于 2021/01/01,截止于起始日 LeetCode 上共有 1916 道题目,部分是有锁题,我们将先把所有不带锁的题目刷完。


在这个系列文章里面,除了讲解解题思路以外,还会尽可能给出最为简洁的代码。如果涉及通解还会相应的代码模板。


为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:github.com/SharingSour…


在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。

相关文章
|
资源调度 JavaScript IDE
使用Vue3+TS重构百星websocket插件(上)
使用Vue3+TS重构百星websocket插件(上)
使用Vue3+TS重构百星websocket插件(上)
|
7月前
|
人工智能 JavaScript 前端开发
字节最新AI 版IDE:用Trae开发网站打包信息追踪插件,国产版Cursor表现如何?
本文介绍了如何使用字节最新推出的AI编程工具Trae,通过零代码方式快速开发一款名为`dist-info`的前端插件。该插件能够将Git信息或自定义内容注入HTML文件中,兼容Webpack和Vite项目。开发者只需在浏览器控制台输入`info`,即可轻松查看代码的相关信息。文章详细描述了插件的背景、开发流程、核心代码实现以及优化建议,并展示了如何借助Trae高效完成项目搭建和代码编写。
760 0
字节最新AI 版IDE:用Trae开发网站打包信息追踪插件,国产版Cursor表现如何?
|
11月前
|
Java 开发者
偏向锁和轻量级锁的适用场景是什么
【10月更文挑战第20天】偏向锁和轻量级锁的适用场景是什么
|
Oracle 关系型数据库 数据库
Docker安装Oracle_11g数据库并配置
Docker安装Oracle_11g数据库并配置
840 0
|
移动开发 编解码 缓存
【知识拓展】音视频中的推流与拉流
【知识拓展】音视频中的推流与拉流
910 1
【Leetcode -225.用队列实现栈 -232.用栈实现队列】
【Leetcode -225.用队列实现栈 -232.用栈实现队列】
82 0
|
C语言 C++
Visual Studio 2019 详细安装教程(图文版)
下载安装包 官网下载安装包 百度网盘下载安装包 安装步骤 运行并创建一个项目 【官网下载安装包步骤有些繁琐,官网反应速度有点慢】 【建议直接从百度网盘继续下载安装包!!!】
7759 0
|
关系型数据库 MySQL 测试技术
只有.frm和.ibd文件时如何批量恢复InnoDB的表---发表到爱可生开源社区
很多时候因为MySQL数据库不能启动而造成数据无法访问,但应用的数据通常没有丢失,只是系统表空间等其它文件损坏了,或者遇到MySQL的bug。
238 0
java202303java学习笔记第三十四天综合练习6统计各个数量1
java202303java学习笔记第三十四天综合练习6统计各个数量1
163 0
|
Java
java学习第七天笔记-方法152-封装4-代码实现
java学习第七天笔记-方法152-封装4-代码实现
181 0
java学习第七天笔记-方法152-封装4-代码实现