蓝桥杯备考冲刺必刷题(Python) | 蓝桥云课 209 翻硬币

本文分享的必刷题目是从蓝桥云课洛谷AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。

欢迎大家订阅我的专栏:算法题解:C++与Python实现!

附上汇总贴:算法竞赛备考冲刺必刷题(Python) | 汇总


【题目来源】

蓝桥云课:1.翻硬币 - 蓝桥云课

【题目描述】

小明正在玩一个"翻硬币"的游戏。

桌上放着排成一排的若干硬币。我们用*表示正面,用o表示反面(是小写字母,不是零)。

比如,可能情形是:oo*oooo;

如果同时翻转左边的两个硬币,则变为:oooo***oooo。

现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

我们约定:把翻动相邻的两个硬币叫做一步操作。

【输入】

两行等长的字符串,分别表示初始状态和要达到的目标状态。

每行的长度<1000。

【输出】

一个整数,表示最小操作步数。

【输入样例】

**********
o****o****

【输出样例】

5

【算法标签】

《蓝桥云课 209 翻硬币》 #2013# #贪心# #省赛#

【代码详解】

s = list(input())  # 将输入字符串转换为列表,方便修改
t = list(input())  # 目标字符串也转换为列表
n = len(s)        # 获取字符串长度
ans = 0           # 初始化操作计数器

# 逐个字符比较
for i in range(n):
    # 如果当前字符已经匹配,跳过
    if s[i] == t[i]:
        continue
    
    # 如果不匹配,翻转下一个字符
    if s[i+1] == '*':
        s[i+1] = 'o'  # 如果是'*'就改为'o'
    else:
        s[i+1] = '*'  # 如果是'o'就改为'*'
    
    ans += 1  # 操作次数加1

print(ans)  # 输出总操作次数

【运行结果】

**********
o****o****
5

你可能感兴趣的:(蓝桥杯,python,职场和发展)