本题可初始化两个一维dp数组或一个二维dp数组。
dp[i]含义见注释。
代码:
def ques_f():
n = int(input())
ls = [input() for _ in range(n)]
#不翻转 dp1[i]第i个字符串不翻转的最小长度
dp1 = [2] * n
#翻转 dp2[i]第i个字符串翻转的最小长度
dp2 = [2] * n
for i in range(1,n):
#1、i-1的串不翻转 i的串不翻转 2、i-1的串翻转 i的串不翻转
dp1[i] = min(dp1[i-1] + (1 if ls[i-1][1] == ls[i][0] else 2),dp2[i-1] + (1 if ls[i-1][0] == ls[i][0] else 2))
#3、i-1的串不翻转 i的串翻转 4、i-1的串翻转 i的串翻转
dp2[i] = min(dp1[i-1] + (1 if ls[i-1][1] == ls[i][1] else 2),dp2[i-1] + (1 if ls[i-1][0] == ls[i][1] else 2))
print(min(dp1[n-1],dp2[n-1]))
ques_f()
4种情况对应的例子如下
情况 | i-1处的字符串 | i处的字符串 |
1 | ab | bc |
2 | ba | bc |
3 | ab | cb |
4 | ba | cb |