541. Reverse String II

Posted 高数考了59

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了541. Reverse String II相关的知识,希望对你有一定的参考价值。

 1 static int wing=[]()
 2 {
 3     std::ios::sync_with_stdio(false);
 4     cin.tie(NULL);
 5     return 0;
 6 }();
 7 
 8 class Solution 
 9 {
10 public:
11     string reverseStr(string s, int k) 
12     {
13         int len=s.length();
14         auto p=s.begin();
15         int i;
16         for(i=k;i<=len;i+=2*k)
17             reverse(p+i-k,p+i);
18         i-=2*k;
19         if(len==i)
20             return s;
21         else if(len-i>k)
22             reverse(p+i+k,s.end());
23         return s;
24     }
25 };

把数组截断,一部分一部分地逆置,以 i 为截断点,(2n-1)k处截断,截断点左侧k个元素要逆置。

在最后一截要分三类讨论,

第一类,i 刚好截到数组末尾,直接返回

第二类,i 左侧空缺元素个数小于k,即有不足k个要逆置的元素,逆置这部分元素即可

第三类,i 左侧空缺元素个数大于k,说明没有需要逆置的元素,直接返回即可

以上是关于541. Reverse String II的主要内容,如果未能解决你的问题,请参考以下文章

541. Reverse String II

[leetcode-541-Reverse String II]

LeetCode - 541. Reverse String II

LeetCode 541. Reverse String II

541. Reverse String II

[Algorithm] Reverse String II