前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指 Offer 58 - II. 左旋转字符串

剑指 Offer 58 - II. 左旋转字符串

作者头像
五分钟学算法
发布2021-08-27 16:20:50
3360
发布2021-08-27 16:20:50
举报
文章被收录于专栏:五分钟学算法五分钟学算法

一、题目描述

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1:

代码语言:javascript
复制
输入: s = "abcdefg", k = 2
输出: "cdefgab"

示例 2:

代码语言:javascript
复制
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"

限制:

  • 1 <= k < s.length <= 10000

二、题目解析

三步走策略。

  • 1、把字符数组的所有字符反转
  • 2、再反转前 length - n 个字符
  • 3、再反转剩余的字符

三、动画描述

四、参考代码

代码语言:javascript
复制
// 登录 AlgoMooc 官网获取更多算法图解
// https://www.algomooc.com
class Solution {
    public String reverseLeftWords(String s, int n) {
        // 1、获取字符串的长度
        int length = s.length();
        // 2、把字符串转换为字符数组的形式
        char[] chars = s.toCharArray();

        // 3、把字符数组的所有字符反转
        // 即  a b c d e f g 
        // 变成了 g f e d c b a
        reverse(chars, 0, length - 1);

        // 4、再反转前 length - n 个字符
        // 即  g f e d c b a
        // 变成了 c d e f g b a
        reverse(chars, 0, length - n - 1);

        // 5、再反转剩余的字符   
        // 即  c d e f g b a
        // 变成了 c d e f g a b
        reverse(chars, length - n, length - 1);

        // 6、最后返回字符串结果就像
        return new String(chars);
    }

    // 借助临时变量的方法,把字符数组进行反转
    private void reverse(char[] chars, int start, int end) {
        // 从头到尾变量所有的字符
        while (start < end) {
            // 定义一个临时变量用来保存字符数组的开始字符
            char temp = chars[start];
            // 将首尾字符交换
            chars[start] = chars[end];
            chars[end] = temp;

            // 继续交换剩下的字符
            start++;
            end--;
        }
    }
}

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 五分钟学算法 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目描述
  • 二、题目解析
  • 三、动画描述
  • 四、参考代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档