力扣-反转字符串 II

题目描述:

给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。

如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。


算法思想:

1.首先写一个字符数组的反转算法,其中数组反转进行的条件是当left指针小于right指针,换一句话讲就是当left指针与right指针相遇或者是越过后,数组就不会在进行交换。

2.在反转函数中,只需要考虑2k长度为单位的字符串,即每次交换的数组的left指针的开始处是i(i每次变化是2k)处,结束处为i+k或者字符串长度(两者中比较小的那个),


代码实现:

public String reverseStr(String s, int k) {  //反转字符串,其中每2k长度的字符串作为一个考虑范围
    int n=s.length();    //获得字符串的长度
    char []arr=s.toCharArray();//将字符串的字符转换成数组
    for(int i=0;i<n;i+=2*k){
       reserve(arr,i,Math.min(i+k,n));
    }
   return new String(arr);
}
public void reserve(char []arr,int left,int right){  //字符串反转
      while(left<right){ //只有字符串中的左面指针小于右面指针的时候,才能进行
          char temp;
          temp=arr[left];
          arr[left]=arr[right];
          arr[right]=temp;
          left++;
          right--;
      }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值