题解一
思路
新引进了一个字符串对象,它相比String是可修改的,多线程安全的,通过它和String的一些方法,完成利用。
代码
- class Solution {
- public String reverseStr(String s, int k) {
- StringBuffer res = new StringBuffer();
- int length = s.length();
- int start = 0;
- while(start < length){
- int firstK = (start + k < length) ? start + k : length;
- int secondK = (start + 2 * k < length) ? start + 2 * k : length;
- StringBuffer t = new StringBuffer(s.substring(start, firstK));
- res.append(t.reverse());
- start += 2 * k;
- if(firstK < secondK){
- res.append(s.substring(firstK, secondK));
- }
- }
- return res.toString();
- }
- }
复制代码 总结
新学习了一个StringBuffer类型,相比String来说,具有可利用(增编削和反转),多线程安全的特性。巩固了String对象的substring()方法(这里的string居然是小写),区间是大于等于a,小于b(比方s.substring(a,b))。
解法二
思路
通过start和end指针的移动,实现替换利用,第六行通过一个函数判断出需要反转的区间,然后通过i += 2 * k 来保留不需要反转的部门。
代码
- class Solution {
- public String reverseStr(String s, int k) {
- char[] arr = s.toCharArray();
- for(int i = 0; i < arr.length; i += 2 * k){
- int start = i;
- int end = Math.min(arr.length-1, start + k-1);
- while(start < end){
- char temp = arr[start];
- arr[start] = arr[end];
- arr[end] = temp;
- start++;
- end--;
- }
- }
- return new String(arr);
- }
- }
复制代码 总结
这种替换方法,上一篇还没以为多好用,这一篇直接就体现出来了,第六行的比较也可以用三元运算符,交换的部门也可以额外写一个函数替换。
个人对于这种题的解答,过于追求对过程的模拟,比方在我刚写的时候我特殊想把star~start+k,start+k~start+2k,分开进行判断,以及对数组剩余长度的判断,但是转头一看分的实在有点太碎了,如这个题解就非常的清晰,但是我并不能完整的思考出来,还是需要精进。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |