作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
示例:nieignhtesevfouenr答:9874
有人请回答这个问题。谢谢。
最佳答案
你可以应用这个算法:
首先计算输入字符串中每个字母的出现次数。例如,示例输入字符串出现以下情况:
{
"e": 4,
"f": 1,
"g": 1,
"h": 1,
"i": 2,
"n": 3,
"o": 1,
"r": 1,
"s": 1,
"t": 1,
"u": 1,
"v": 1,
"w": 0,
"x": 0,
"z": 0
}
我还包含了未使用的字母,因为它们会在“二”、“六”和“零”中发挥作用,但在此示例输入中未表示。
现在我们可以观察到:
如果你找到输入字符串中“z”的次数,你可以减去“zero”的出现次数,你可以从“z”、“e”、“r”和“z”中减去那个次数“哦”。应该为输出记录那么多“0”。
完成上述操作后,我们可以继续执行以下操作:
在考虑了这些之后,我们最终可以得出结论:
我们可以稍微简化一下,因为有些字母在决定代表哪些数字方面并没有真正发挥作用。例如,在上面的逻辑中,我们不关心“n”或“e”的数量,所以当我们检测到“one”时,我们不妨不减少它们的数量,......等。上面列出了我们关心的仅有的 10 个字母。
最后,我们使用每个数字的计数来构建排序后的字符串。
这是 JavaScript 中的一个实现。它运行示例输入的算法。没有输入验证...假定为数字名称的有效组合:
// reference data. The identifying letter is put at the front,
// and the letters that still matter for another digit
// follow it.
let map = [
["zo", "0"],
["wo", "2"],
["ufo", "4"],
["xis", "6"],
["gih", "8"],
["o", "1"],
["h", "3"],
["fi", "5"],
["s", "7"],
["i", "9"]
];
// The algorithm
function decimals(s) {
// Count occurrences of letters
let charCount = {};
for (let c of "efghinorstuvwxz") charCount[c] = 0;
for (let c of s) charCount[c]++;
// Recognise digits by their identifying letter
let digitCount = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
for (let [name, digit] of map) {
let frequency = charCount[name[0]];
for (let letter of name) charCount[letter] -= frequency;
digitCount[digit] = frequency;
}
// Build the result string
let result = "";
for (let digit of "9876543210") result += digit.repeat(digitCount[digit]);
return result;
}
// Example run
let result = decimals("nieignhtesevfouenr");
console.log(result);
关于algorithm - 给出了随机顺序的一串数字,你必须以十进制格式严格降序打印它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68962820/
我是一名优秀的程序员,十分优秀!