给定两个字符串,找到每个字符串的字母可以组成的所有回文。从这些回文中,从每组中选择一个,当组合和重新排列时,可以产生最长的回文。如果有多个该长度的回文,请选择其中按字母顺序排列最小的一个。
示例: 输入:
字符串 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)
这是我写的解决方案,但这并不完全有效