541. 反转字符串 II

541. 反转字符串 II

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

示例 1:

输入:s = “abcdefg”, k = 2
输出:“bacdfeg”
示例 2:

输入:s = “abcd”, k = 2
输出:“bacd”

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-string-ii
这段代码实现了一个函数 reverseStr,该函数接受一个字符串 s 和一个整数 k 作为参数,并将字符串 s 按照每 2k 个字符为一组进行翻转操作。函数返回翻转后的字符串。

class Solution {
public:
    string reverseStr(string s, int k) {
        for(int i=0;i<s.size();i+=2*k){
            if(i+k<=s.size()){
                reverse(s.begin()+i,s.begin()+k+i);
            }else{
                reverse(s.begin()+i,s.end());
            }
        }
        return s;

    }
};

下面是对该代码的详细解析:

  1. 函数签名:

    string reverseStr(string s, int k)
    
    • 参数 s:要翻转的字符串。
    • 参数 k:每 2k 个字符为一组进行翻转操作的步长。
  2. 循环遍历字符串:

    for (int i = 0; i < s.size(); i += 2*k)
    
    • 初始化变量 i 为 0,每次循环增加 2k。
  3. 翻转操作:

    if (i + k <= s.size()) {
        reverse(s.begin() + i, s.begin() + k + i);
    } else {
        reverse(s.begin() + i, s.end());
    }
    
    • 如果当前组的起始位置加上步长 k 小于等于字符串 s 的长度,则翻转从起始位置到 k 之间的字符。这里使用 reverse 函数进行翻转。
    • 如果当前组的起始位置加上步长 k 大于字符串 s 的长度,则翻转从起始位置到字符串末尾的所有字符。
  4. 返回翻转后的字符串:

    return s;
    
    • 返回经过翻转操作后的字符串 s

总结起来,该函数通过循环遍历字符串,并对每个组进行翻转操作,最后返回翻转后的字符串。如果某个组的长度不足 k,则只翻转该组的全部字符。

你可能感兴趣的:(字符串)