文章目录
- 题目描述
- 代码
- 自己需要注意的地方
题目描述
给定一个字符串 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
代码
class Solution {public String reverseStr(String s, int k) {int len = s.length();char[] chars = s.toCharArray();for (int i = 0; i < len; i=i+2*k) {int r = i+k-1;//如果r已经超过了len-1,那么就是需要把剩余的字符都反转if(r<(len-1)){reverse(chars,i,r);}else {reverse(chars,i,len-1);}}String res = new String(chars);return res;}//这个函数是用来反转指定区间范围内的字符串public void reverse(char[] arr, int start, int end) {int left = start;int right = end;while (left < right) {char temp = arr[left];arr[left]=arr[right];arr[right]=temp;left++;right--;}}
}
自己需要注意的地方
1、起初自己针对多种情况进行判断比较麻烦,没有利用循环每次加i=i+2*k这种方法,比较麻烦
2、最后返回字符串的时候不能用chars.toString(),因为这样会用下面这种方式转化
public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());}
输出的结果并不是我们期望的形式
应该用下面这种方式来转化才是要输出的形式
String res = new String(chars);