1
4
首先查找字符串中的所有回文,使L[i][j]表示以S[i]结尾的第j个最长回文的长度。假设S是输入字符串。这可以在O(N^2)时间内完成,首先考虑长度1回文,然后考虑长度2回文,依此类推。 在知道所有长度的i-2回文后,找到长度i回文是一个字符比较的问题。
根据美光的要求进行编辑: 这是计算L[i][j]背后的想法。我写这个只是为了传达这个想法,代码可能有问题。
|
2
2
|
3
1
一个等价的问题是计算字符串的Snip数。 假设你想用最少的剪刀剪一根绳子,这样剩下的每一块都是回文。我们称之为线的剪数。也就是说,snip数总是等于给定字符串中最小回文数的1。长度n的每个字符串最多有snip个数n-1,每个回文有snip个数0。这里是工作的python代码。
|
4
0
|
5
-2
O(n^3)解决方案。递归迭代字符串。为每一个字母建立每一个回文与这封信作为回文的开始。注意奇数和偶数回文。重复直到字符串结束。如果在字符串的末尾回文数是最小的,那么记住你是如何得到的。如果字符串中当前回文计数和剩余字母的总和大于当前回文计数最小值,则不要进一步迭代。 一个优化:当发现回文从字符串的末尾开始并搜索当前字母的出现位置时。将子字符串测试为“回文”。不要从最短的回文开始,这不是最优的。 |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
Manny · 如何比较Perl中的字符串? 2 年前 |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |