题解 | 小红的字符串

小红的字符串

https://www.nowcoder.com/practice/f9738786c00a40a2b7ddf6c82c1a59b1

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.针对每次选择都进行贪心,贪的是每次变化的操作次数最少(局部解),每个选择的都最少,那就说明全局操作就最少(全局解)。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务