【发布时间】:2025-04-12 06:35:01
【问题描述】:
我正在尝试编写代码来模拟使用 Ruby 中的multi-tap 电话键盘编写文本消息。这是电话键盘:
1 2 3
ABC DEF
4 5 6
GHI JKL MNO
7 8 9
PQRS TUV WXYZ
0
(space)
我尝试在 Ruby 中将其定义为:(不起作用)
"0" = [" "] # (adds a space)
"1" = [""] # (adds nothing)
"2" = ["a", "b", "c"]
"3" = ["d", "e", "f"]
"4" = ["g", "h", "i"]
"5" = ["j", "k", "l"]
"6" = ["m", "n", "o"]
"7" = ["p", "q", "r", "s"]
"8" = ["t", "u", "v"]
"9" = ["w", "x", "y", "z"]
我将通过两个示例来解释它是如何工作的。首先我将发送字符串goat。要发送g,我按4 一次。接下来,要发送o,我按6 三次(因为按6 一次将发送m,按6 两次将发送@ 987654331@)。对于a,按一次2,对于t,按一次8。因此我们会发送
466628
g oat
接下来,考虑cake。通过相同的程序,我们将发送
22225533
ca k e
这里有问题。解码时,2222 有几种可能性。可能是aaaa、bb 等等。为了克服这种歧义,在每个数字字符串之后插入一个表示为空格的“暂停”,然后是相同数字的字符串。因此,对于cake,我们会写
222 25533
c a k e
我已经有了一个带有数字及其对应字母的散列,而且我知道我必须按照数字重复的次数对数字进行排序。 但我不知道我用什么方法。
另外,如果我需要编码(数字到字母),我是否必须使用相同的逻辑?
【问题讨论】:
-
请查看“How to Ask”、“Stack Overflow question checklist”及其所有链接页面。我们希望看到您尝试解决此问题。目前,您已经向我们提出了您应该解决的要求,并希望我们为您编写代码。 “How do I ask and answer homework questions?”会解释。
-
@CarySwoveland 这是一个暂停,所以
222可以注册为c。如果没有空格,2222可以是aaaa、aab、aba、ac或任何其他组合。 -
g13,我相信@Stefan 和我所做的编辑与您尝试做的一致。如果是这样,您可能希望澄清最后一句话,这是您的原话。如果您澄清该句子以说明您希望仅对文本进行编码,或者同时对文本进行编码和解码,则有可能会重新打开该问题。这是一个有趣的问题。
-
你好@CarySwoveland 和@Stefan!对不起,我花了太长时间,我已经做了很长时间的这些作业,所以我决定花一些时间离开电脑,不久前回来了。我测试了编码和解码解决方案,它们都有效。它鼓励我更深入地研究正则表达式和地图,它帮助我解决了其他作业!非常感谢您花时间帮助我。当我有另一个问题时,我会更加小心。现在我将根据我在此处寻求帮助时取得的进展对其进行编辑。