题解:蓝桥云课 209 翻硬币
【题目来源】
蓝桥云课: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
浙公网安备 33010602011771号