LeetCode541反转字符串2

70 阅读1分钟

🍀反转字符串2

描述:

 # 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
 ​
 如果剩余字符少于 k 个,则将剩余字符全部反转。
 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
  
 ​
 示例 1:
 ​
 输入:s = "abcdefg", k = 2
 输出:"bacdfeg"
 示例 2:
 ​
 输入:s = "abcd", k = 2
 输出:"bacd"
  
 ​
 提示:
 ​
 1 <= s.length <= 104
 s 仅由小写英文组成
 1 <= k <= 104

思考:

这个其实理解了也很简单,简而言之就是每隔k个字符颠倒k个字符,如果末尾的字符不够k个就全颠倒。注意颠倒时候是i + k -1,这是k个字符,如果直接是i + k就是k + 1个字符了!

实现:

 class Solution {
     public String reverseStr(String s, int k) {
 ​
         char[] chars = s.toCharArray();
         char c;
 ​
         for (int i = 0; i < chars.length; i += 2*k) {
             if ((chars.length - i - 1) < k){
                 reserve(chars, i, (chars.length - 1));
             }else {
                 reserve(chars, i, (i + k - 1));
             }
         }
 ​
         return new String(chars);
     }
 ​
     public static void reserve(char[] chars, int left, int right){
         char c;
         while (left < right){
             c = chars[left];
             chars[left++] = chars[right];
             chars[right--] = c;
         }
     }
 }

测试一下!

image.png