66.从英文中重建数字

题号423:

给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字。按升序输出原始的数字。

注意:

输入只包含小写英文字母。

输入保证合法并可以转换为原始的数字,这意味着像 "abc" 或 "zerone" 的输入是不允许的。

输入字符串的长度小于 50,000。

示例 1:

输入: "owoztneoer"输出: "012" (zeroonetwo)

示例 2:

输入: "fviefuro"输出: "45" (fourfive)

解题思路:

e:zero/one/three/five/seven/eight/nine

f:four/five

g:eight

h:three/eight

i:five/six/eight/nine

n:one/seven/nine

o:zero/one/two/four

r:zero/three/four

s:six/seven

t:two/three/eight

u:four

v:five/seven

w:two

x:six

z:zero

其中,0、2、4、6、8可以通过字母z、w、u、x、g直接得出;

去掉0、2、4、6、8:

e:one/three/five/seven/nine

f:five

h:three

i:five/nine

n:one/seven/nine

o:one

r:three

s:seven

t:three

v:five/seven

可以发现数字1、3、5、7的个数也已可确定;

e:nine

i:nine

n:nine

最后确定9的个数。

代码实现:

class Solution {

public:

string originalDigits(string s) {

int count[15]=;// 统计e、f、g、h、i、n、o、r、s、t、u、v、w、x、z的数量

char c[15]={'e','f','g','h','i','n','o','r','s','t','u','v','w','x','z'};

for(int i=0;i

for(int j=0;j

if(s[i]==c[j]){

count[j]++;

break;

}

}

}

int res[10]=;

res[8]=count[2];// 8-eight

res[4]=count[10];// 4-four

res[2]=count[12];// 2-two

res[6]=count[13];// 6-six

res[0]=count[14];// 0-zero

count[1]=count[1]-count[10];// f

count[4]=count[4]-count[2]-count[13];// i

count[6]=count[6]-count[10]-count[12]-count[14];// o

count[7]=count[7]-count[10]-count[14];// r

count[8]=count[8]-count[13];// s

count[9]=count[9]-count[2]-count[12];// t

res[1]=count[6];// 1-one by o

res[3]=count[7];// 3-three by r

res[5]=count[1];// 5-five by f

res[7]=count[8];// 7-seven by s

count[9]=count[9]-count[7];// t

count[4]=count[4]-count[1];// i

res[9]=count[4];// 9-nine by i

string ss="";

for(int i=0;i

for(int j=0;j

ss+=to_string(i);

}

}

return ss;

}

};

看到有人写的思路一样但更简洁的代码:

string res = "";

int counts[128]=, nums[10]=;

for (char c : s) ++counts[c];

nums[0] = counts['z'];

nums[2] = counts['w'];

nums[4] = counts['u'];

nums[6] = counts['x'];

nums[8] = counts['g'];

nums[1] = counts['o'] - nums[0] - nums[2] - nums[4];

nums[3] = counts['h'] - nums[8];

nums[5] = counts['f'] - nums[4];

nums[7] = counts['s'] - nums[6];

nums[9] = counts['i'] - nums[6] - nums[8] - nums[5];

for (int i = 0; i

for (int j = 0; j

res += (i + '0');

}

}

return res;

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180602G1KKNK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券