541. 反转字符串 II - 力扣(LeetCode)

class Solution {
public:
    string reverseStr(string s, int k) {
        int n = size(s);
         for(int i=0;i<n;i+=2*k)
            {
                int left=i;
                int right=min(i+k-1,n-1);
                while(left<=right)
                {
                    swap(s[left],s[right]);
                    left++;
                    right--;
                }
            }
            return s;
    }
};

思路:

题目理解:对一个字符串,前k个反转,后k个不反转,依此类推 ......

1.设一个循环,实现间隔2k进行操作;

2.循环中实现前k个反转;

问题:

1.右边界的定义为什么是min(i+k-1,n-1)

i+k-1   类比left =0,right=k-1;left = i,right = i+k-1;

当s=abc

i=0  ,i=2时,left = 2,right =2+2-1=3,s[2] = 'c';s[3]不存在:超出数组边界索引

预期输出是bac

n-1   =3-1=2;是不变的。

怎么想到这一点?-----为了不超出边界索引,故而n-1

posted on 2025-11-12 14:22  FAfa_C++  阅读(2)  评论(0)    收藏  举报