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,说明没有需要逆置的元素,直接返回即可

posted on 2018-06-04 18:13  高数考了59  阅读(170)  评论(0)    收藏  举报