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的主要内容,如果未能解决你的问题,请参考以下文章
[leetcode-541-Reverse String II]
LeetCode - 541. Reverse String II