用于查找在 Python 中使字符串半单调所需的更新次数的程序

假设我们有一个长度为偶数的小写字符串 s。我们必须找到需要更新的最小字符数,以便所有 i 都满足以下三个条件之一,其中 0 ≤ i < n/2 和 j, n/2 ≤ j < n -

  • s[i] > s[j]

  • s[i] < s[j]

  • s[i] == s[j]

所以,如果输入像 s = "pppxxp",那么输出将是 1 因为如果我们把最后一个 "p" 改为 "x",那么这可以满足条件 s[i] < s[j]

示例

让我们看看以下实现以获得更好的理解 -

from collections import Counter
from string import ascii_lowercase
def solve(s):
   n = len(s)
   left = Counter(s[: n >> 1])
   right = Counter(s[n >> 1 :])

   ans = n
   for pivot in ascii_lowercase:
      ans = min(ans, n - left[pivot] - right[pivot])

      good = sum(left[c] for c in left if c <= pivot)
      good += sum(right[c] for c in right if c > pivot)
      ans = min(ans, n - good)

      good = sum(left[c] for c in left if c > pivot)
      good += sum(right[c] for c in right if c <= pivot)
      ans = min(ans, n - good)

   return ans

s = "pppxxp"
print(solve(s))

输入

"pppxxp"
输出结果
1

猜你喜欢