剑指offer 66. 左旋转字符串

✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📚专栏地址:剑指offer系列题解
📝原题地址:题目地址
📣专栏定位:为找工作的小伙伴整理常考算法题解,祝大家都能成功上岸!
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

题目描述

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。

请定义一个函数实现字符串左旋转操作的功能。

比如输入字符串"abcdefg"和数字 22,该函数将返回左旋转 22 位得到的结果"cdefgab"

注意:

  • 数据保证 nn 小于等于输入字符串的长度。
数据范围

输入字符串长度 [0,1000][0,1000]。

样例
输入:"abcdefg" , n=2

输出:"cdefgab"

方法一:字符串拼接 O(n)

我们可以利用 C++ 自带的函数 substr 对字符串进行拼接,s.substr(int x,int y) 表示从字符串 s 的第 x 个位置起,截取 y 个字符。如果没有 y ,则默认截取 x 以后的所有字符。

class Solution {
public:
    string leftRotateString(string str, int n) {
        string tail = str.substr(0, n);
        string head = str.substr(n);
        return head + tail;
    }
};

方法二:字符串旋转 O(n)

我们也可以直接用翻转操作得到最终答案,拿 abcdefgn = 2 来举例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-89X00DAD-1665834220624)(剑指offer第二版C++题解.assets/66-1.png)]

第一步: 旋转整个字符串。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5i2emrfZ-1665834220627)(剑指offer第二版C++题解.assets/66-2.png)]

第二步: 再分别旋转两个部分,下标区间为 [0,str.size()-n)[str.size()-n,str.size())

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AXy9clWl-1665834220629)(剑指offer第二版C++题解.assets/66-3.png)]

class Solution {
public:
    string leftRotateString(string str, int n) {
        reverse(str.begin(), str.end());
        reverse(str.begin(), str.begin() + str.size() - n);
        reverse(str.begin() + str.size() - n, str.end());
        return str;
    }
};

欢迎大家在评论区交流~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值