s = list(map(str,input()))
left = 0
right = len(s)-1
count = 0
cha1 = 0
cha2 = 0
while left<=right:
x = ord(s[left])
y = ord(s[right])
#左边变右边
if x<y:
cha1 = y - x
else:
cha1 = 26-x+y
#右边变左边
#cybb
if x<y:
cha2 = 26-y+x
else:
cha2 = x-y
if cha1<cha2:
count+=cha1
else:
count+=cha2
left+=1
right-=1
print(count)
1.针对回文字符串选择用双指针指向头部和尾部在循环中遍历,每次循环时头指针增加,尾指针减少,直到头部指针大于尾部指针,循环才结束。
2.针对回文字符串,要么就是左边的字符变成右边的字符,要么就是右边的字符变成左边的字符。因为本题字符只能向右移动,如果两边字符一起变,操作数就会变得很多,不考虑这个。
3.针对每次选择都进行贪心,贪的是每次变化的操作次数最少(局部解),每个选择的都最少,那就说明全局操作就最少(全局解)。

京公网安备 11010502036488号