题干
牛牛喜欢字符串,但是他讨厌丑陋的字符串。
对于牛牛来说,一个字符串的丑陋值是字符串中相同连续字符对的个数。
比如字符串“ABABAABBB”的丑陋值是3,因为有一对"AA"和两对重叠的"BB"。现在给出一个字符串,字符串中包含字符’A’、‘B’和’?’。牛牛现在可以把字符串中的问号改为’A’或者’B’。牛牛现在想让字符串的丑陋值最小,希望你能帮帮他。
输入描述: 输入包括一个字符串s,字符串长度length(1 ≤ length ≤ 50),字符串只包含’A’,‘B’,’?'三种字符
输出描述:输出一个整数,表示最小的丑陋值示例1 输入: A?A 输出: 0
题解
"""
1. 去除首尾字符串的'?'
2. 从第一个非'?'字符起到最后一个非'?'字符结尾,采用贪婪策略,若进行遍历,若遍历当前字符是否为'?',若是,则将当前'?'字符修改为与其前一个字符不同的'A'或'B',
3. 最后从非'?'开头与结尾遍历, 计算丑陋字符串数目
"""
import sys
for line in sys.stdin:
a = line.strip('\n')
string = list(a)
num = len(string)
begin = 0
end = num - 1
# step1. 去除首尾的'?'字符串
while begin < num - 1 and string[begin] == '?':
begin += 1
while end > 0 and string[end] == '?':
end -= 1
ugly = 0
# step2.
for i in range(begin, end + 1):
if string[i] == '?':
if string[i - 1] == 'A':
string[i] = 'B'
else:
string[i] = 'A'
# step3.
for i in range(begin, end):
if string[i] == string[i + 1]:
ugly += 1
print(ugly)
# 牛客测试 https://www.nowcoder.com/questionTerminal/f004293aed0a46aba0e9c14d1f9f4f2b?orderByHotValue=0&page=1&onlyReference=false