力扣记录:字符串1——344 反转字符串,541 反转字符串II

本次题目

  • 344 反转字符串
  • 541 反转字符串II

344 反转字符串

  • 参考链表的206反转链表,双指针法:左右指针分别从数组头尾出发,相互交换数值,再同时向中间移动,直到左右指针相遇。
  • 注意:交换数值可以用中间变量直接交换,也可以通过位运算^。
class Solution {
    public void reverseString(char[] s) {
        //定义左右指针
        int left = 0;
        int right = s.length-1;
        //相互交换数值
        while(left < right){
            //中间变量
            char temp = s[left];
            s[left] = s[right];
            s[right] = temp;
            // //位运算
            // s[left] ^= s[right]; //两值不同的位
            // s[right] ^= s[left]; //右=不同位^右=左
            // s[left] ^= s[right]; //左=不同位^左=右
            //继续下一轮循环
            left++;
            right--;
        }
    }
}

541 反转字符串II

  • 边界为2k,每次左指针前进2k,然后进行判断区间内元素个数,小于k全部反转(右指针指向最后的元素),大于等于k反转前k个元素(右指针指向边界k元素),反转同上。
  • 注意:将字符串转为字符数组toCharArray()再转为字符串new String();也可以使用new StringBuffer()处理字符串然后再toString()。
class Solution {
    public String reverseStr(String s, int k) {
        //将字符串转为字符数组
        char[] sArr = s.toCharArray();
        //开始循环,每次前进2k
        for(int i = 0; i < sArr.length; i += 2*k){
            //定义左指针
            int left = i;
            //根据区间元素个数定义右指针
            int right = Math.min(i + k - 1, sArr.length - 1);
            // //判断区间元素个数
            // if(i + k <= sArr.length){
            //     right = i + k - 1;
            // }else{
            //     right = sArr.length - 1;
            // }
            //替换区间内元素
            while(left < right){
                char temp = sArr[left];
                sArr[left] = sArr[right];
                sArr[right] = temp;
                //继续下一轮
                left++;
                right--;
            }
        }
        return new String(sArr);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值