【发布时间】:2014-12-23 08:50:02
【问题描述】:
给定一个字符串,并且最多可以更改字符串中的 Q 个字母。您还将获得一个子字符串列表(每两个字符长),并带有相应的分数。字符串中子字符串的每次出现都会增加您的总分。可以达到的最高分数是多少?
字符串长度
例子:
字符串 = bpdcg
Q = 2
子字符串:
bz - 得分:2
zd - 得分:5
dm - 得分:7
ng - 得分:10
在此示例中,您可以将字符串中的“p”更改为“z”,将“c”更改为“n”,从而获得最高分数 b。因此,您的新字符串是“bzdng”,其得分为 2+5+10 = 17。
我知道给定一个已经改变了字母的字符串,可以使用字典匹配算法(例如 aho-corasick 或复杂度稍差的 Rabin Karp)在线性时间内检查分数。但是,尝试每两个字母替换将花费太长时间,然后检查将花费太长时间。
我认为另一种可能的方法是向后工作,从给定的子字符串构造理想的字符串,然后检查它是否与原始字符串最多相差两个字符。但是,我不知道如何做到这一点,即使可以做到,我认为也需要太长时间。
最好的方法是什么?
【问题讨论】:
-
String和Q的最大长度是多少?
-
@PhamTrung 该字符串最多可包含 150 个字符,Q 最多可包含 100 个字符
-
这看起来像是一个背包问题。
-
@n.m.以什么方式?我看到分配给每个子字符串的点可能像物品一样,背包的长度如何,但是您如何解释您最多只能对原始字符串进行两次更改的事实?跨度>
-
所有子串的长度都是2吗?
标签: string algorithm search string-hashing