定义字符串完全由 ‘A’ 和 ‘B’组成,当然也可以全是’A’或全是’B’。如果字符串从前往后都是以字典序排列的,那么我们称之为严格递增字符串。
给出一个字符串s,允许修改字符串中的任意字符,即可以将任何的’A’修改成’B’,也可以将任何的’B’修改成’A’,
求可以使s满足严格递增的最小修改次数。
0 < s的长度 < 100000
输入描述
输入一个字符串: “AABBA”
输出描述
输出:1
以下是但字符串过长时有可能爆内存的写法:
str = "AAABAAABBBBABB"
total = len(str)
dp = [0] * total
numA = 0
for i in str:
if i == "A":
numA += 1
qNumA = 0
for i in range(len(str)):
if str[i] == "A":
qNumA += 1
dp[i] = qNumA
result = total
for i in range(len(str)):
result = min(result, i + 1 - dp[i] + numA - dp[i])
print(result)
以下是优化后的写法:
s = input()
# 算法入口
def getResult(s):
total = len(s)
A = len(s.replace("B", "")) # 字符串str中共有多少个A
# 如果全B或全A,则直接返回0
if A == 0 or A == total:
return 0
# 修改为全A或者全B的次数取最小值
ans = min(A, total - A)
leftA = 0
for i in range(total):
if s[i] == 'A':
leftA += 1
ans = min(i + 1 - leftA + A - leftA, ans)
return ans
# 算法调用
print(getResult(s))