合并回文解决方案[已关闭]

问题描述 投票:0回答:0

给定两个字符串,找到每个字符串的字母可以组成的所有回文。从这些回文中,从每组中选择一个,当组合和重新排列时,可以产生最长的回文。如果有多个该长度的回文,请选择其中按字母顺序排列最小的一个。

示例: 输入:

字符串 s1 = 'aabbc' 字符串 s2 = 'ddefefq'

第一个字符串的所有字母都可以构成回文。使用所有字母的选项是 [abcba, bacab]。第二个字符串的所有字母都可以构成回文。使用所有字母的选项是 [defqfed, dfeqefd, edfqfde, efdqdfe, fdeqedf, fedqdef]。 s1 中两个最长结果的长度为 5。s2 中六个最长结果的长度为 6。

从 s1 和 s2 的最长结果中,按字母顺序合并形成最低合并回文的两个结果。在这种情况下,选择 abcba 和 defqfed。如果丢弃“c”或“q”,则两个回文可以组合形成单个回文。按字母顺序排列的最小组合回文是 abdefcfedba。

功能说明 在下面的编辑器中完成功能 mergePalindromes。该函数必须返回一个字符串。

mergePalindromes 有以下参数:

s1:一个字符串 s2:一个字符串 限制:

1 ≤ |s1| ≤ 10^5 1≤|s2| ≤ 10^5 s1 和 s2 将仅包含 ascii[a-z] 范围内的小写英文字母

自定义测试的输入格式 第一行包含一个字符串 s1。 第二行包含一个字符串 s2。

示例案例0 用于自定义测试的示例输入

STDIN功能

aab → s1 = 'aab' cca → s2 = 'cca'

样本输出

相思树

说明

可以从第一个字符串中选取字符 ['a', 'a'] 来形成回文'aa'。可以从第二个字符串中选取字符 ['c', 'c', 'a'] 形成回文 'cac' 并与 'aa' 合并形成 'acaca'。

示例案例1 用于自定义测试的示例输入

STDIN功能

adaab → s1 = 'adaab' cac → s2 = 'cac'

样本输出

阿卡阿

说明

可以从第一个字符串中选取字符 ['a', 'a', 'a'] 来形成回文'aaa'。可以从第二个字符串中选取字符 ['c', 'c', 'a'] 形成回文 'cac' 并与 'aaa' 合并形成 'aaccaa'。

预期输入如下:

输入_ = ( ('mgbgikhvjyiigxhsrgekjmjkrs','cikmqfxpcybzyhbdrhudjmsoaqdurgjsnjlqogrkcmdtxbyazfxvbprimbcblpnriyvndntmpvjun'), ('aaa', 'cac'), ('aaaabbbccc', 'ddeeccc'), ('awwzaigvxuikdqlvshspsvyckttwdzqmarpxglwmpob','dtisfxyobndu'), ('aabbc', 'ddefefq'), )

答案:

答案=[ 'abbbbccddfggghhiiijjjkklmmmnnoppqrrrsstuvxyyzzyyxvutssrrrqpponnmmmlkkjjjiiihhgggfddccbbba', '阿卡', 'aabcccdeedcccbaa', 'abddgiklmpqstvwwxzzxwwvtsqpmlkigddba' ]

请帮忙

def mergePalindromes(s1, s2): 计数 = {} 对于 s1 中的 c: 计数[c] = count.get(c, 0) + 1

for c in s2:
    count[c] = count.get(c, 0) + 1

ans = ""
chars = list(count.keys())
chars = sorted(chars)

for c in chars:
    if count[c] % 2 == 0:
        ans += c * (count[c] // 2)
        count[c] = 0
    else:
        ans += c * ((count[c] - 1) // 2)
        count[c] = 1

middle_char = ""

for c in chars:
    if count[c] == 1:
        middle_char = c
        break

ans = ans + middle_char + ans[::-1]

return ans

if name == "main":

answers = [
    'abbbccddfggghhiiijjjkklmmmnnoppqrrrsstuvxyyzzyyxvutssrrrqpponnmmmlkkjjjiiihhgggfddccbbba',
    'aaccaa',
    'aabcccdeedcccbaa',
    'abddgiklmpqstvwwxzzxwwvtsqpmlkigddba'
]
input_ = (
    ('mgbgikhvjyiigxhsrgekjmjkrs', 'cikmqfxpcybzyhbdrhudjmsoaqdurgjsnjlqogrkcmdtxbyazfxvbprimbcblpnriyvndntmpvjun'),
    ('aaa', 'cac'),
    ('aaaabbbccc', 'ddeeccc'),
    ('awwzaigvxuikdqlvshspsvyckttwdzqmarpxglwmpob', 'dtisfxyobndu'),
    ('aabbc', 'ddefefq'),
)

for i in input_:
    result = mergePalindromes(i[0], i[1])
    print(result)

这是我写的解决方案,但这并不完全有效

python python-3.x palindrome
© www.soinside.com 2019 - 2024. All rights reserved.