代码随想录 541. 反转字符串 II

67 阅读1分钟

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

暴力枚举

根据题目要求,把所有情况一一列举出来

我没列举完,只通过了给的两个测试用例:

class Solution {
public:
    string reverseStr(string s, int k) {
     int size=s.size();
     if(size<2*k)return s;

     swap(s[k-2],s[k-1]);
      
      if(size-(2*k)<k)
      {
             for(int i=(2*k)+1;i<s.size();i++)
      {
          swap(s[i],s[i+1]);
      }
      }
      else if(size-(2*k)<2*k)
      {
          for(int i=2*k;i<2*k+1;i++)
          swap(s[i],s[i+1]);
      }
       
   
    
return s;
    }
};

image.png

image.png

优化

字符串操作进阶! | LeetCode:541. 反转字符串II_哔哩哔哩_bilibili

image.png

因为是一次跳2k个,所以当string s个数为奇数个时,可能会出现跳越界的情况,例如 {1 2 3},所以我们要设置旋转的前提条件

image.png

注意:

image.png

code

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()+i+k);
            continue;
            }

            reverse(s.begin()+i,s.begin()+s.size());
        }

     return s;
    }
};