用 Python 编写程序确定构建给定字符串的最小成本
pythonserver side programmingprogramming更新于 2025/12/18 13:32:17
假设,我们必须构建一个长度为 n 的字符串"str"。要构建字符串,我们可以执行两个操作。
- 可以在 str 的末尾添加一个字符,成本为 a。
- 可以在 str 的末尾添加一个子字符串 sub_str,成本为 r。
我们必须计算构建字符串 str 的最小成本。
因此,如果输入为 a = 5、r = 4、str = 'tpoint',则输出将为 29。
要构建字符串 'tpoint',成本如下 − 所述
str = 't'; 添加了一个新字符,因此成本为 5。 str = 'tp';增加了一个新字符,因此成本为 5。 str = 'tpo'; 增加了一个新字符,因此成本为 5。 str = 'tpoi'; 增加了一个新字符,因此成本为 5。 str = 'tpoin'; 增加了一个新字符,因此成本为 5。 str = 'tpoint'; 子字符串 't'被添加,因此成本为 4。
总成本为 5 + 5 + 5 + 5 + 5 + 4 = 29。
为了解决这个问题,我们将遵循以下步骤 −
- size := str 的大小
- largest := 一个新列表
- low := 0
- 对于范围 1 到 size+1 的 upp,执行
- 当 str[从索引 low 到索引 upp] 不存在于 str[从索引 0 到索引 low] 中时,执行
- low := low + 1
- 在 largest 的末尾插入 (upp - low)
- 当 str[从索引 low 到索引 upp] 不存在于 str[从索引 0 到索引 low] 中时,执行
- c := 一个包含的新列表a
- 对于 1 到 size 范围内的 i,执行
- 如果 largest[i] 与 0 相同,则
- 在 c 的末尾插入 (c + a 的最后一个元素)
- 否则,
- 在 c 的末尾插入 (c + a 的最后一个元素) 中的最小值 (c[i - largest[i]] + r)
- 如果 largest[i] 与 0 相同,则
- 返回 c 的最后一个元素
示例
让我们看看下面的实现以便更好地理解 −
def solve(a, r, str): size = len(str) largest = [] low = 0 for upp in range(1, size+1): while str[low:upp] not in str[:low]: low += 1 largest.append(upp - low) c = [a] for i in range(1, size): if largest[i] == 0: c.append(c[-1] + a) else: c.append(min(c[-1] + a, c[i - largest[i]] + r)) return c[-1] print(solve(5, 4, 'tpoint'))
输入
5, 4, 'tpoint'
输出
29
相关文章
有用资源
python 参考教程 - 该教程包含有关 python 的更多信息:https://www.cainiaomax.com/python/

