【问题标题】:Finding different combinations of a numeric string that corresponds to letters查找对应于字母的数字字符串的不同组合
【发布时间】:2016-07-11 08:24:02
【问题描述】:

假设我有一个输入:

['145689']

我有一本字典{'1': 'a', '2': 'b', '3':'c' ..., '26': 'z', '27':' '}。我正在尝试从左到右查找此输入字符串的不同有效组合,这可能会导致所有可能的字符串。

示例输入:

['11'] 

示例输出:

['aa', 'j']

'ab' 来自'1' '1' 的组合,'10' 对应于'j'

这样做的蛮力方法是什么?

【问题讨论】:

  • 您应该考虑使用实际数字而不是字符串的字典。如果这些数字恰好是字典中的字母位置,则您的代码可以非常简单。您只需找到最大的匹配项,然后返回较小的匹配项。
  • 你能举一个超过2个字符的例子吗?如果有 3 个字符,[a]、[ab]、[abc] 和 [bc] 都算,还是不算 [bc]?
  • 我删除了我的答案,因为我意识到我不明白你是示例输出; b如何映射到0,b不映射到2?
  • @en_Knight 抱歉,我的描述中有错误。你说得对。映射中没有 0。
  • @newtherapy 对我来说仍然没有意义 - “10 对应于'j'”,你的意思是“11 对应于 k”,否则我们从哪里得到“10”的“0” "来自

标签: python string algorithm string-matching


【解决方案1】:

这看起来像一个家庭作业,所以这里有一个合理的提示。

你拿你的字符串145689,检查长度最大为2的子字符串(最大数是26)114。如果它们中的任何一个在字典中,您将对子字符串的其余部分运行递归调用。在我的示例中,它将是 call('45689', dict['1'])call('5689', dict['14'])

所以基本上你只需要编写一个简单的递归程序。

【讨论】:

  • 谢谢。我正在考虑使用递归(这是一个构建过程)来解决这个问题。但是,我不太确定基本情况是长度为 1 的字符串,还是长度为 1 和 2 的字符串?
  • @newtherapy 我认为您将需要 0 长度和 1 长度的基本情况,然后需要 1 长度和 2 长度子字符串的递归情况。
  • @newtherapy 您的号码从127 这意味着它们可以采用长度为1 或2 的子字符串。您的基本情况将是一个空字符串。所以如果你到达一个空字符串,你就可以成功地转换你的字符串。
  • 对于奖励积分:在计算'145689' 期间,您将递归'45689''5689';但对'45689' 的递归调用将在'5689' 上递归。有一个标准技巧可以只计算一次而不是两次 '5689' 的结果,并将其从指数算法转换为线性算法——你能自己重新发明这个技巧吗?
  • @DanielWagner 不确定这是对我还是对 OP 的问题,以及它实际上是一个问题还是一个友好的提示。但是,是的,它被称为动态编程,您可以只存储您之前已经计算过的一些元素的计算。如果你需要计算的东西已经计算过了,那么忽略它。
猜你喜欢
  • 1970-01-01
  • 2021-01-21
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 2022-06-12
  • 2015-11-26
  • 2019-12-18
相关资源
最近更新 更多