題目描述:
給定一個非空字符串,其中包含字母順序打亂的英文單詞表示的數字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);
}
};
從今天開始,我會公佈我的解題代碼啦。我沒有寫解釋,是因爲覺得太繁瑣,又擔心寫了那麼多還解釋不清楚,有興趣的朋友可以留言哈~