[编程题] 丑陋的字符串

丑陋的字符串

题干

牛牛喜欢字符串,但是他讨厌丑陋的字符串。
对于牛牛来说,一个字符串的丑陋值是字符串中相同连续字符对的个数。
比如字符串“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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值