Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找子字符串回文最多的字符串排列_Java_Python_C++_Algorithm_Sorting - Fatal编程技术网

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"))))