【发布时间】:2018-03-05 17:13:43
【问题描述】:
问题陈述:找出可以从给定的摩尔斯电码序列中组成的“仅元音”字符串的数量(必须使用整个字符串)
我有这个当前的递归解决方案。我想加快这个算法在 O(n) 时间内运行。我知道我可以将我的数组定义为 S[j] = 可以通过从 1 ... j 访问创建的唯一字符串的最大数量。但我不知道从那里去哪里。
morsedict = {'A': '.-',
'E': '.',
'I': '..',
'O': '---',
'U': '..-'}
maxcombinations = 0
def countCombinations(codelist):
if len(codelist) is 0:
global maxcombinations
maxcombinations += 1
return
if codelist[0] in morsedict.values():
countCombinations(codelist[1:])
if len(codelist) >= 2 and codelist[:2] in morsedict.values():
countCombinations(codelist[2:])
if len(codelist) >= 3 and codelist[:3] in morsedict.values():
countCombinations(codelist[3:])
return
【问题讨论】:
-
提示:1)您的代码非常接近于成为一个有效的递归解决方案(第一次检查),2)使用 memoization - 一个数组来存储组合的数量增加输入字符串的长度。
-
@meowgoesthedog 你是对的。我想出了如何在这个问题的上下文中正确使用记忆,并将子问题与更大的问题联系起来。
标签: time-complexity dynamic-programming computation-theory