- 思路
这道题首先要明确不同的情况做不同的 *** 作,(1)当少于k全部反转;(2)当大于k小于2k,反转前k个;(3)当等于2k,反转前k个。
整体思路就是用双指针,一个指头,一个指尾然后进行计数。
class Solution { void reverse(char[] arr, int start, int end) { char temp; while (start < end) { temp = arr[start]; arr[start] = arr[end]; arr[end] = temp; start++; end--; } } public String reverseStr(String s, int k) { int len = s.length(); char[] arr = s.toCharArray(); int start = 0, i; for (i = 0; i < len; i++) { // 等于2k if (i - start + 1 == 2 * k) { reverse(arr, start, start + k - 1); start = i + 1; } } // 小于k if (i - start < k) { reverse(arr, start, i - 1); return new String(arr); } // 大于k小于2k if (i - start < 2 * k) { reverse(arr, start, start + k - 1); return new String(arr); } return new String(arr); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)