Java 查找子字符串回文最多的字符串排列
对于我的算法类,我有以下作业:;这是一个排序作业,所以我怀疑我必须使用某种排序算法 查找子字符串回文最多的字符串排列。输入数据是Java 查找子字符串回文最多的字符串排列,java,python,c++,algorithm,sorting,Java,Python,C++,Algorithm,Sorting,对于我的算法类,我有以下作业:;这是一个排序作业,所以我怀疑我必须使用某种排序算法 查找子字符串回文最多的字符串排列。输入数据是N(字符串的长度)和字符串s(1aabbccddfggghhh也将给出29的最佳结果。您可以使用以下代码检查任何字符串: 请提供代码的开头。我的代码不好。我大大超过了我的时间限制。对于这项任务,应该有另一种方式,我希望有人能给我一个提示。@Lovren97不过,提供代码是一种很好的做法。对不起,伙计们,我会把我的代码放进去。这是我第一次问堆栈上的任何问题。@Agile_
N
(字符串的长度)和字符串s
(1
)。输出数据应该是具有最多回文子字符串的字符串。(如果有更多包含相同金额的,请打印任何人)
我试着找到所有的排列,然后找到大多数回文子串的排列,但是有一个1的时间限制,这样我就超过了这个限制。有人能帮我完成这项任务吗
这是一个输入示例:
输入:
5
abccb
输出:
bcacb (one of the outputs)
注意:我也尝试过找到子串回文最多的结构,但这种方法没有给出正确的结果。我以前已经回答过类似的问题
产生最大回文数的字符串的最佳重排可能是
排序字符串的重排。以字符串abcabc
为例,让n
表示一般字符串的大小
我们可以重新排列字符串以形成回文abc|cba
,这将产生长度为n(所有单字符)+n/2(在反射点上拾取子字符串)+{在反射点的任何一个存在回文的情况下,在本例中为0}的回文子字符串
我们还可以重新排列字符串以形成(aa)(bb)(cc)
形式的回文对,这将产生n(单字符)+n/2(成对子串)+{其他可能的回文子串}回文组
类似地,也可以形成3对回文组(aba)(cbc)
,在这种情况下,回文组的数量将为n+n/3+{..}
显然,当我们形成更多的m-配对回文时,回文子串的数量将会减少。因此,我们需要考虑案例I和案例II。在这两种情况中,最好通过增加一起出现的相等字符的密度来最大化情况II的{other..}情况,这是排序字符串中的情况。因此,排序后的字符串应产生最佳答案
因此,在您的案例中,oolol
->llooo
将给出9的最佳结果,gagadbccgghhchbdg
->aabbccddfggghhh
也将给出29的最佳结果。您可以使用以下代码检查任何字符串:
请提供代码的开头。我的代码不好。我大大超过了我的时间限制。对于这项任务,应该有另一种方式,我希望有人能给我一个提示。@Lovren97不过,提供代码是一种很好的做法。对不起,伙计们,我会把我的代码放进去。这是我第一次问堆栈上的任何问题。@Agile_Eagle问题是我的代码是克罗地亚语的,因为我来自克罗地亚,我担心你不会理解很多,或者你需要很多时间来理解我想做的一切。
def ispalin(s):
return (s == s[::-1])
def cpalin(s):
c = 0
for i in range(len(s)):
for j in range(i, len(s)):
if ispalin(s[i:j + 1]):
c += 1
return c
print(cpalin(''.join(sorted("abccbaghghghgdfd"))))
print(cpalin(''.join(sorted("oolol"))))