在 Python 中查找最长真棒子字符串的程序

假设我们有一个数字字符串 s。正如我们所知,一个很棒的子串是 s 的一个非空子串,这样我们可以进行任意数量的交换以使其成为回文。我们必须找到 s 的最大长度 awesome 子串的长度。

因此,如果输入类似于 s = "4353526",那么输出将是 5,因为 "35352" 是最长的真棒子字符串。我们可以制作“35253”回文。

示例

让我们看下面的实现来更好地理解

def solve(s):
   n = 0
   pos_map = {0:len(s)}

   max_len = 1

   for i in range(len(s)-1, -1, -1):
      n = n ^ (1 << int(s[i]))

      if n in pos_map:
         max_len = max(max_len, pos_map[n]-i)

      for j in range(10):
         m = n ^ (1 << j)
         if m in pos_map:
            max_len = max(max_len, pos_map[m]-i)

      if n not in pos_map:
         pos_map[n] = i

   return max_len

s = "4353526"
print(solve(s))

输入

"4353526"
输出结果
5

猜你喜欢