423. Reconstruct Original Digits from English(Medium)
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the digits in ascending order.
Note:
- Input contains only lowercase English letters.
- Input is guaranteed to be valid and can be transformed to its original digits. That means invalid inputs such as "abc" or "zerone" are not permitted.
- Input length is less than 50,000.
Example 1:
Input: "owoztneoer" Output: "012"
Example 2:
Input: "fviefuro" Output: "45" 这道题给了我们一串英文字符串,是由表示数字的英文单词组成的,不过字符顺序是打乱的,让我们重建出数字。那么这道题的思路是先要统计出各个字符出现的次数,然后算出每个单词
出现的次数,然后就可以重建了。由于题目中限定了输入的字符串一定是有效的,那么不会出现无法成功重建的情况,这里需要用个trick。我们仔细观察这些表示数字的单词"zero",
"one", "two", "three", "four", "five", "six", "seven", "eight", "nine",我们可以发现有些的单词的字符是独一无二的,比如z,只出现在zero中,还有w,u,x,g这
四个单词,分别只出现在two,four,six,eight中,那么这五个数字的个数就可以被确定了,由于含有o的单词有zero,two,four,one,其中前三个都被确定了,那么one的个数也就知道了;
由于含有h的单词有eight,three,其中eight个数已知,那么three的个数就知道了;由于含有f的单词有four,five,其中four个数已知,那么five的个数就知道了;由于含有s的单词有six,seven,
其中six个数已知,那么seven的个数就知道了;由于含有i的单词有six,eight,five,nine,其中前三个都被确定了,那么nine的个数就知道了,知道了这些问题就变的容易多了,我们按这个
顺序"zero", "two", "four", "six", "eight", "one", "three", "five", "seven", "nine"就能找出所有的个数了,参见代码如下:
/* 首先进行一下分析过程
代表字符 可能出现在的数字
zero -> z 0
one -> o 0, 1, 2, 4
two -> w 2
three -> r 3, 4,0
four -> u 4
five -> f 4, 5
six -> x 6
seven -> s 6, 7
eight -> g 8
nine -> i 5, 6, 8, 9 */
class Solution {
public:
string originalDigits(string s) {
int* digit = new int [](); // 注意后边的括号,是全部初始化为0,如果不初始化的话,会有问题,???
string res;
for (int i = ; i < s.size(); i++){
char c = s[i];
if (c == 'z') digit[]++;
if (c == 'w') digit[]++;
if (c == 'u') digit[]++;
if (c == 'x') digit[]++;
if (c == 'g') digit[]++; if (c == 'o') digit[]++;
if (c == 'r') digit[]++;
if (c == 'f') digit[]++;
if (c == 's') digit[]++;
if (c == 'i') digit[]++;
}
digit[] = digit[] - digit[] - digit[] - digit[];
digit[] = digit[] - digit[] - digit[];
digit[] = digit[] - digit[];
digit[] = digit[] - digit[];
digit[] = digit[] - digit[] -digit[] - digit[]; for (int i = ; i <= ; i++){
for (int j = ; j < digit[i]; j++){
res.append(to_string(i));
}
}
return res;
}
};
注意的一个问题:
int *pia = new int[10]; // array of 10 uninitialized ints
此 new 表达式分配了一个含有 10 个 int 型元素的数组,并返回指向该数组第一个元素的指针,此返回值初始化了指针 pia。
在自由存储区中创建的数组对象是没有名字的,只能通过其地址间接地访问堆中的对象。
注意:C++使用new和delete在堆(自由存储区)上分配和释放动态数组。
动态数组初始化:
1.元素只能初始化为元素类型的默认值,而不能像数组变量一样,用初始化列表为数组元素提供各不相同的初值。
2.对于内置数据类型元素的数组,必须使用()来显示指定程序执行初始化操作,否则程序不执行初始化操作:
int *pia = new int[10]; // 每个元素都没有初始化
int *pia2 = new int[10] (); // 每个元素初始化为0
3.类类型元素的数组,则无论是否使用(),都会自动调用其默认构造函数来初始化:
string *psa = new string[10]; // 每个元素调用默认构造函数初始化
// 每个元素调用默认构造函数初始化
动态分配空数组:
char *cp = new char[0];
之后,可以动态改变cp的维数。
动态释放:
delete [] pia;
典型使用示例:
// 处理C风格字符串时使用const指针
const size_t len = strlen(pc) +1; // size_t用于数组的大小和下标
for (size_t ix = 0; ix != 1000000; ++ix) {
char *pc2 = new char[len]; // pc2指向的存储空间的内容会动态改变,因此不使用const
strncpy (pc2, pc, len); // 使用strncpy比使用strcpy安全
// do something;
delete [] pc2;
}
423. Reconstruct Original Digits from English(Medium)的更多相关文章
- 【LeetCode】423. Reconstruct Original Digits from English 解题报告(Python)
[LeetCode]423. Reconstruct Original Digits from English 解题报告(Python) 标签: LeetCode 题目地址:https://leetc ...
- [LeetCode] 423 Reconstruct Original Digits from English
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
- LeetCode 423. Reconstruct Original Digits from English——学会观察,贪心思路
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
- 【LeetCode】423. Reconstruct Original Digits from English
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
- 423. Reconstruct Original Digits from English (leetcode)
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
- 423. Reconstruct Original Digits from English
这个题做得突出一个蠢字.. 思路就是看unique letter,因为题里说肯定是valid string.. 一开始有几个Z就有几个ZERO 同样的还有x for six, g for eight, ...
- 423 Reconstruct Original Digits from English 从英文中重建数字
给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9.按升序输出原始的数字.注意: 输入只包含小写英文字母. 输入保证合法并可以转换为原始的数字,这意味着像 "ab ...
- [LeetCode] Reconstruct Original Digits from English 从英文中重建数字
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
- Leetcode: Reconstruct Original Digits from English
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
随机推荐
- [20181031]12c 在线移动数据文件.txt
[20181031]12c 在线移动数据文件.txt --//12c以前,移动或者改名数据文件是一项比较麻烦的事情,至少要停一下业务.而12c支持在线移动或者改名数据文件,并且有点不可思议--//的是 ...
- 创建一个C++制作的包含Opencv功能的dll,供C#程序使用
目的:获取某图片指定位置的颜色. 实现该目的的方法有很多,但为了有助于扩充自己技术广度,所以决定采用标题中的方法来完成. 没有C++编程经验,也没有制作C++版Opencv语法经验,也没有制作dll的 ...
- C++实现程序单实例运行的两种方式
简介 在我们编写程序的时候,经常会注意到的一个问题就是如何能够让程序只运行一个实例,确保不会让同一个程序多次运行,从而产生诸多相同进程,给我们的带来不便呢?那么常用的有以下四种方法,第一种方法是通过扫 ...
- GitLab安装及使用
GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目. GitLab拥有与Github类似的功能,能够浏览 ...
- Python爬虫-05:Ajax加载的动态页面内容
1. 获取AJAX加载动态页面的内容 1.1. Introduction 如果所爬取的网址是通过Ajax方式加载的,就直接抓包,拿他后面传输数据的文件 有些网页内容使用AJAX加载,只要记得,AJAX ...
- node基础—概述与安装
什么是Nodejs 简单的说 Node.js 就是运行在服务端的 JavaScrip(编写高性能网络服务器的JavaScript工具包(用js开发服务端程序))t. JS是脚本语言,脚本语言都需要一个 ...
- 连接rabbitmq
#消费者import pika # 连接服务器 credentials = pika.PlainCredentials('*****', '***') connection = pika.Blocki ...
- 从 0 → 1,学习Linux该这么开始!
首先我们还是来普及以下概念,讲点虚的.现在是图形系统的天下,windows我们用了20多年.成功归功与它图形界面,你会点鼠标吗你会敲键盘吗?所以你会上网会聊天会玩游戏了.那么,0基础接触的Linux, ...
- 15.selenium_case02
# 抓取今日头条的新闻链接 from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWa ...
- [Android] ScrollView can host only one direct child
android 采用ScrollView布局时出现异常:ScrollView can host only one direct child.主要是ScrollView内部只能有一个子元素,即不能并列两 ...