题目描述:
给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9。按升序输出原始的数字。
注意:
输入只包含小写英文字母。
输入保证合法并可以转换为原始的数字,这意味着像 "abc" 或 "zerone" 的输入是不允许的。
输入字符串的长度小于 50,000。
AC代码:
class Solution {
public:
string originalDigits(string s) {
int character[1024]={0}; //存放字母a~z出现的频数
int i=0;
while(s[i]!='\0'){
character[s[i++]]++;
}
string number[10]={"zero","two","six","seven","eight","three","four","five","nine","one"};
char identifier[10]={'z','w','x','s','g','t','u','f','i','o'};
int a[10]={0}; //每个数字出现的频数 与number中顺序对应
map<int,int> relation;
relation[0]=0;
relation[1]=9;
relation[2]=1;
relation[3]=5;
relation[4]=6;
relation[5]=7;
relation[6]=2;
relation[7]=3;
relation[8]=4;
relation[9]=8;
int j=0;
for(i=0;i<10;i++){
a[i]=character[int(identifier[i])];
for(j=0;j<number[i].size();j++){
character[int(number[i][j])]-=a[i];
}
}
char* res=new char[100000];
int p=0;
char temp='0';
for(i=0;i<10;i++){
for(j=0;j<a[relation[i]];j++){
res[p++]=temp;
}
temp++;
}
res[p]='\0';
return string(res);
}
};
从今天开始,我会公布我的解题代码啦。我没有写解释,是因为觉得太繁琐,又担心写了那么多还解释不清楚,有兴趣的朋友可以留言哈~