classSolution { public String reverseStr(String s, int k) { intn= s.length(); char[] arr = s.toCharArray(); for (inti=0; i < n; ) { //计算剩余字符 intleave= n - i;
//剩余字符大于或等于2k个,反转前k个 if(leave >= 2*k){ reverseStr2(arr, i, i + k - 1); }elseif(leave < k) { // 剩余字符小于k个,反转剩余所有字符 reverseStr2(arr, i, n - 1); }else { //剩余字符大于等于k个,小于2k个,反转前k个 reverseStr2(arr, i, i + k - 1); } //i向前移动k位 i += 2*k; } returnnewString(arr); }
//用于反转指定起始位置和结束位置的字符串 publicstaticvoidreverseStr2(char[] arr, int start, int end) { for (inti= start, j = end; i < j; i++, j--) { chartemp= arr[i]; arr[i] = arr[j]; arr[j] = temp; } } }