Leetcode——541. 反转字符串 I

打印 上一主题 下一主题

主题 980|帖子 980|积分 2940

 题解一

思路

新引进了一个字符串对象,它相比String是可修改的,多线程安全的,通过它和String的一些方法,完成利用。
代码

  1. class Solution {
  2.     public String reverseStr(String s, int k) {
  3.         StringBuffer res = new StringBuffer();
  4.         int length = s.length();
  5.         int start = 0;
  6.         while(start < length){
  7.             int firstK = (start + k < length) ? start + k : length;
  8.             int secondK = (start + 2 * k < length) ? start + 2 * k : length;
  9.             StringBuffer t = new StringBuffer(s.substring(start, firstK));
  10.             res.append(t.reverse());
  11.             start += 2 * k;
  12.             if(firstK < secondK){
  13.                 res.append(s.substring(firstK, secondK));
  14.             }
  15.         }
  16.         return res.toString();
  17.     }
  18. }
复制代码
 总结

新学习了一个StringBuffer类型,相比String来说,具有可利用(增编削和反转),多线程安全的特性。巩固了String对象的substring()方法(这里的string居然是小写),区间是大于等于a,小于b(比方s.substring(a,b))。
解法二

思路

通过start和end指针的移动,实现替换利用,第六行通过一个函数判断出需要反转的区间,然后通过i += 2 * k 来保留不需要反转的部门。
代码

  1. class Solution {
  2.     public String reverseStr(String s, int k) {
  3.         char[] arr = s.toCharArray();
  4.         for(int i = 0; i < arr.length; i += 2 * k){
  5.             int start = i;
  6.             int end = Math.min(arr.length-1, start + k-1);
  7.             while(start < end){
  8.                 char temp = arr[start];
  9.                 arr[start] = arr[end];
  10.                 arr[end] = temp;
  11.                 start++;
  12.                 end--;
  13.             }
  14.         }
  15.         return new String(arr);
  16.     }
  17. }
复制代码
总结

这种替换方法,上一篇还没以为多好用,这一篇直接就体现出来了,第六行的比较也可以用三元运算符,交换的部门也可以额外写一个函数替换。
个人对于这种题的解答,过于追求对过程的模拟,比方在我刚写的时候我特殊想把star~start+k,start+k~start+2k,分开进行判断,以及对数组剩余长度的判断,但是转头一看分的实在有点太碎了,如这个题解就非常的清晰,但是我并不能完整的思考出来,还是需要精进。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

知者何南

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表