返回顶部
首页 > 资讯 > 后端开发 > GO >GoJava算法之从英文中重建数字示例详解
  • 555
分享到

GoJava算法之从英文中重建数字示例详解

GoJava算法英文重建数字GoJava算法 2022-11-13 14:11:34 555人浏览 独家记忆
摘要

目录从英文中重建数字Java实现Go实现从英文中重建数字 给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。 示例 1: 输入

从英文中重建数字

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

示例 1:

输入:s = "owoztneoer" 输出:"012" 示例 2:

输入:s = "fviefuro" 输出:"45"  

提示:

1 <= s.length <= 105

s[i] 为 ["e","g","f","i","h","o","n","s","r","u","t","w","v","x","z"] 这些字符之一

s 保证是一个符合题目要求的字符串

Java实现

先对 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);
    }
}

时间复杂度:O(mlogm)

空间复杂度:O(L+m)

Go实现

输入中各个字母的个数,可以知道一些数字的个数了,比如只有零用了z,只有六用了x等等,

在将一些可以求得的个数求了后,将它们占用的其他字母的个数排除掉,经过排除后,剩下的有用到别人用过的字母的数字的个数也可以得到了。 比如在四的个数通过u得到后,五的个数就可以通过剩下的f的个数得到了。

func originalDigits(s string) string {
    cnts, a := make([]int, 26), byte('a')
    for i := range s {
        cnts[s[i] - a]++
    }
    zeros, twos, fours, sixs, eights := cnts[byte('z') - a], cnts[byte('w') - a], cnts[byte('u') - a], cnts[byte('x') - a], cnts[byte('g') - a]
    fives, sevens, ones, threes := cnts[byte('f') - a] - fours, cnts[byte('s') - a] - sixs, cnts[byte('o') - a] - zeros - twos - fours, cnts[byte('h') - a] - eights
    nines := cnts[byte('i') - a] - fives - sixs - eights
    return strings.Repeat("0", zeros) + strings.Repeat("1", ones) + strings.Repeat("2", twos) + strings.Repeat("3", threes) + strings.Repeat("4", fours) + strings.Repeat("5", fives) + strings.Repeat("6", sixs) + strings.Repeat("7", sevens) + strings.Repeat("8", eights) + strings.Repeat("9", nines)
}

时间复杂度:O(mlogm)

空间复杂度:O(L+m)

以上就是Go Java算法之从英文中重建数字示例详解的详细内容,更多关于Go Java算法英文重建数字的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: GoJava算法之从英文中重建数字示例详解

本文链接: https://lsjlt.com/news/172152.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • GoJava算法之从英文中重建数字示例详解
    目录从英文中重建数字Java实现Go实现从英文中重建数字 给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。 示例 1: 输入...
    99+
    2022-11-13
    Go Java算法英文重建数字 Go Java算法
  • GoJava算法之累加数示例详解
    目录累加数方法一:穷举法(java)方法二:深度优先遍历(go)累加数 累加数 是一个字符串,组成它的数字可以形成累加序列。 一个有效的 累加序列 必须 至少 包含 3 个数。除了最...
    99+
    2024-04-02
  • GoJava算法之同构字符串示例详解
    目录同构字符串方法一:哈希表(Java)方法一:哈希表(Go)同构字符串 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 ...
    99+
    2024-04-02
  • GoJava算法之找不同示例详解
    目录找不同方法一:计数(Java)方法二:求和(Go)找不同 给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位...
    99+
    2024-04-02
  • Gojava算法之括号生成示例详解
    目录括号生成方法一:深度优先遍历(java)方法一:深度优先遍历(go)括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组...
    99+
    2024-04-02
  • GoJava算法之单词规律示例详解
    目录单词规律方法一:哈希表(Java)方法一:哈希表(GO)单词规律 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同...
    99+
    2024-04-02
  • GoJava算法之外观数列实现方法示例详解
    目录外观数列方法一:遍历生成(Java)方法二:递归(Go)外观数列 给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都...
    99+
    2022-11-13
    Go Java算法外观数列 Go Java算法
  • GoJava算法之Excel表列名称示例详解
    目录Excel表列名称方法一:数学(Java)方法一:数学(Go)Excel表列名称 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。 ...
    99+
    2024-04-02
  • GoJava算法之迷你语法分析器示例详解
    目录迷你语法分析器方法一:深度优先遍历(Java)方法二:栈(Go)迷你语法分析器 给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 N...
    99+
    2024-04-02
  • C++Leetcode实现从英文中重建数字
    目录题目分析代码题目 分析 首先我们先分析每个字母的组成,然后发现一些字符只在一个单词中出现,我们先去统计一下这些单词个数。 z,w,u,x,g都只出现在一个数字中,也就是0,2...
    99+
    2024-04-02
  • GoJava算法之K个重复字符最长子串详解
    目录至少有K个重复字符的最长子串方法一:分治(Java)方法二:滑动窗口(go)至少有K个重复字符的最长子串 给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串,&nb...
    99+
    2024-04-02
  • GoJava算法之二叉树的所有路径示例详解
    目录二叉树的所有路径方法一:深度优先遍历搜索(Java)方法二:广度优先遍历(Go)二叉树的所有路径 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的...
    99+
    2024-04-02
  • GoJava算法之字符串中第一个唯一字符详解
    目录字符串中第一个唯一字符方法一:哈希表(Java)方法二:队列(Go)字符串中第一个唯一字符 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引...
    99+
    2024-04-02
  • C++ Leetcode如何实现从英文中重建数字
    本篇文章给大家分享的是有关C++ Leetcode如何实现从英文中重建数字,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。题目分析首先我们先分析每个字母的组成,然后发现...
    99+
    2023-06-21
  • Go Java 算法之字符串解码示例详解
    目录字符串解码方法一:栈(Java)方法二:递归(Go)字符串解码 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号...
    99+
    2024-04-02
  • Go Java算法之交错字符串示例详解
    目录交错字符串方法一:动态规划(Java)方法一:动态规划(GO)交错字符串 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 ...
    99+
    2022-11-13
    Go Java算法交错字符串 Go算法 Java算法
  • vue2从数据变化到视图变化之diff算法图文详解
    目录引言1、isUndef(oldStartVnode)2、isUndef(oldEndVnode)3、sameVnode(oldStartVnode, newStartVnode)...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作