来自力扣的题目,在限定的范围内根据规则进行字符串的反转,不妨以限定条件将数组分割成m个部分,之后根据规则进行反转,C++提供了revese函数帮助我们实现,传入反转范围的开头与结尾就能够使用。
由于是以2k作为范围的限定,在for循环时就可以每次加上2k,这样子就可以圈定每次范围的距离。
最后在反转的时候,可能会出现边界的问题,加上正常反转一共有三种情况,但是正常反转与剩余字符小于2k大于k的效果一样,因此只要确保剩余字符少于k的时候有另一种运行操作。
由此在反转时,若i+k小于n那么则说明剩余字符是大于k个的,因此正常反转,否则反转边界限定至数组结尾。
class Solution { public: string reverseStr(string s, int k) { int n = s.length(); for (int i = 0; i < n; i += 2 * k) { reverse(s.begin() + i, s.begin() + min(i + k, n)); } return s; } };