Python中查找通过移除或改组字符生成的字符串的最长回文子串


假设我们有一个字符串;我们必须找到可以通过删除或改组字符串中的字符生成的**最长**回文。如果存在多个回文,则只返回一个。

因此,如果输入类似于pqqprrs,则输出将是pqrsrqp。

  • 为了解决这个问题,我们将遵循以下步骤:

  • count := 大小为256的数组,填充为0

  • 对于 i 从0到字符串大小,执行:

    • count[string[i]的ASCII码] := count[string[i]的ASCII码] + 1

  • begin := 空字符串,mid := 空字符串,end := 空字符串

  • character := 'a'的ASCII码

  • 当character <= 'z'的ASCII码时,执行:

    • 如果 count[character] AND 1 非零,则

      • mid := character

      • count[character] := count[character] - 1

      • character := character - 1

    • 否则,

      • 对于 i 从0到 count[character]/2(整数除法),执行:

        • begin := begin + character (来自character)

    • character := character + 1

  • end := begin

  • end := 反转end

  • 返回 begin + mid + end

示例

让我们来看下面的实现,以便更好地理解:

 在线演示

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

更新于:2020年8月25日

228 次浏览

启动您的职业生涯

完成课程后获得认证

开始
广告
© . All rights reserved.