day27左旋转字符串

该文章介绍了如何解决编程面试题‘剑指Offer58-II.左旋转字符串’。主要方法包括使用整体反转加局部反转的策略,通过多次反转字符串的部分区域来实现指定长度的左旋转。提供的代码示例展示了两种不同的Java实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.题目描述

 题目链接:剑指 Offer 58 - II. 左旋转字符串

2.题解

i.我的解法

 ii.使用整体反转+局部反转

具体步骤为:

  1. 反转区间为前n的子串
  2. 反转区间为n到末尾的子串
  3. 反转整个字符串

 3.代码示例

i.我的解法

class Solution {
    public String reverseLeftWords(String s, int n) {
        char[] result=s.toCharArray();
        int length=result.length;
        int left=0,right=1;//定义双指针
        char temp;
        for(int i=0;i<n;i++){
            temp=result[0];//取第一个元素(参与左旋),一共取n次
            //后一位元素覆盖到前一位元素
            while(right<length) result[left++]=result[right++];
            //一次循环结束要将指针还原好进行下一次覆盖操作
            left=0;
            right=1;
            result[length-1]=temp;//把取到的参与左旋的元素放到最后
        }
        return String.valueOf(result);
    }
}

ii. 使用整体反转+局部反转

class Solution {
    public String reverseLeftWords(String s, int n) {
        char[] chars = s.toCharArray();
        reverse(chars, 0, chars.length - 1);
        reverse(chars, 0, chars.length - 1 - n);
        reverse(chars, chars.length - n, chars.length - 1);
        return new String(chars);
    }

    public void reverse(char[] chars, int left, int right) {
        while (left < right) {
            chars[left] ^= chars[right];
            chars[right] ^= chars[left];
            chars[left] ^= chars[right];
            left++;
            right--;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值