在此挑战中,您通过了两件事:
- 字符串长度
N
- 字符串列表
L
,每个都有一个指定的点值。任何未传入的字符串的点值为0
您需要构造一个长度字符串N
,以使所有子字符串点的总和尽可能大。
例如:
5 [("ABC", 3), ("DEF", 4), ("CDG", 2)]
应该输出
ABCDG
因为带有点(ABC
和CDG
)的两个子字符串总共有5个点,所以其他任何可能的构造都不能给出5个或更多点。
子字符串可以在字符串中多次使用,并且可以重叠。您可以假设这些点将始终为正,子字符串的长度将在1到N
字符长之间,并且那个N > 0
。如果最多有多个构造,请打印其中任何一个。
您的程序必须在合理的时间内运行(每个示例的时间不得超过一分钟):
1 [("A", 7), ("B", 4), ("C", 100)] => C
2 [("A", 2), ("B", 3), ("AB", 2)] => AB
2 [("A", 1), ("B", 2), ("CD", 3)] => BB
2 [("AD", 1), ("B", 2), ("ZB", 3)] => ZB
3 [("AB", 2), ("BC", 1), ("CA", 3)] => CAB
3 [("ABC", 4), ("DEF", 4), ("E", 1)] => DEF
4 [("A", 1), ("BAB", 2), ("ABCD", 3)] => AAAA or ABAB or BABA or ABCD
5 [("A", 1), ("BAB", 2), ("ABCD", 3)] => BABCD or BABAB
5 [("ABC", 3), ("DEF", 4), ("CDG", 2)] => ABCDG
5 [("AB", 10), ("BC", 2), ("CA", 2)] => ABCAB
6 [("AB", 10), ("BC", 2), ("CA", 2)] => ABABAB
8 [("AA", 3), ("BA", 5)] => BAAAAAAA
10 [("ABCDE", 19), ("ACEBD", 18), ("ABEDC", 17), ("BCEDA", 16), ("EBDAC", 15), ("BACD", 14), ("CADB", 13), ("ABDC", 12), ("CABD", 11), ("EBDC", 10), ("ACE", 9), ("CBA", 8), ("AEC", 7), ("BE", 6), ("AE", 5), ("DC", 4), ("BA", 3), ("A", 2), ("D", 1)]
=> ACEBDACEBD
这是一个代码高尔夫,所以请用您喜欢的语言准备最短的答案!
我们是否必须使用您的确切输入格式,还是可以为我们的语言使用任何方便的输入格式?
—
flawr
@flawr任何方便的输入方法都可以(字典,stdin,函数参数)
—
Nathan Merrill
该
—
isaacg
DEF
元组缺少一个逗号
我有一个很好的解决方案,但是对于最后一个测试用例来说太慢了。
—
isaacg 2015年
@isaacg我有一个优雅的解决方案,可惜此注释太小而无法包含它。(我没有,只是想引用Fermat。)
—
Orlp