|
|
1
7
当然,如果您决定更改允许的操作,这种“天真”的算法实际上可能会派上用场。
给定一个字符串,我们猜测得到的回文的中间,然后尝试计算使该字符串成为围绕该中间的回文所需的插入次数。
假设我们考虑一个中间,它给出了两个字符串L和R(一对左和一对右)。 Longest Common Subsequence 算法(这是一个DP算法)现在可以用来创建一个“super”字符串,其中包含L和R的倒数,请参阅 Shortest common supersequence 选择中间的插入数最少的部分。 我想这是O(n^3)(注意:我没有试着证明这是真的)。 |
|
|
2
2
我的C#解决方案查找字符串中的重复字符,并使用它们减少插入的次数。用这样的话来说 程序 ,我使用“r”字符作为边界。在r的内部,我将其作为回文(递归)。在r的外面,我镜像了左右两边的人物。 某些输入有多个最短输出: 输出 吹牛 奥图普托 . 我的解决方案只选择了其中一种可能性。 一些示例运行:
首先,我需要检查输入是否已经是回文:
然后我需要在输入中找到任何重复的字符。可能不止一个。这个词 有两个重复最多的字符(“e”和“s”):
我的算法如下:
请注意,您需要一个反向函数:
|
|
|
3
1
递归解决方案添加到字符串末尾: 有两个基本情况。当长度为1或2时。递归情况:如果极值相等,则 使回文成为不带极端的内部字符串,并用极端返回该字符串。 如果两个极端不相等,则将第一个字符添加到末尾,并将回文设置为 包含上一个最后一个字符的内部字符串。把那个还给我。
|
|
|
William Edwardson · 最长重复子序列:边缘情况 2 年前 |
|
|
Srinivasan A · 动态编程:(不吃冰淇淋的最短天数) 2 年前 |
|
|
user22847357 · 如何输出字典中最小的一个最短的超弦? 2 年前 |
|
|
THN · 为什么timeit会导致所有内存运行的时间几乎不变? 3 年前 |
|
|
Silva He · 如何使用动态编程来解决区间覆盖问题? 3 年前 |