假设我们有一个字符串;我们必须找到可以通过删除或改组字符串中的字符来生成的最长回文。如果回文不止一个,则只返回一个。
因此,如果输入类似于pqqprrs,则输出将为pqrsrqp。
为了解决这个问题,我们将遵循以下步骤-
count:=大小为256的数组,填充为0
对于范围在0到字符串大小之间的i,执行
count [ASCII of(string [i])]:= count [ASCII of(string [i])] + 1
开始:=空白字符串,中:=空白字符串,结束:=空白字符串
字符:=('a')的ASCII
而字符<= ASCII的('z'),做
对于范围为0的i进行计数[字符] / 2(整数除法),请执行
开始:=开始+来自(字符)的字符
中:=字符
count [character]:= count [character]-1
字符:=字符-1
如果count [character] AND 1非零,则
除此以外,
字符:=字符+ 1
结束:=开始
结束:=结束
从(中间)连接结束返回开始连接字符
让我们看下面的实现以更好地理解-
def get_palindrome(string): count = [0]*256 for i in range(len(string)): count[ord(string[i])] += 1 begin = "" mid = "" end = "" character = ord('a') while character <= ord('z'): if (count[character] & 1): mid = character count[character] -= 1 character -= 1 else: for i in range(count[character]//2): begin += chr(character) character += 1 end = begin end = end[::-1] return begin + chr(mid) + end string = "pqqprrs" print(get_palindrome(string))
"pqqprrs"
输出结果
pqrsrqp