【第六天】 leetCode刷题笔记分享 | 容易篇 | 剑指Offer 58-II 左旋转字符串

一、题目信息

1.1 题目描述

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

1.2 示例

  • 示例1
输入: s = "abcdefg", k = 2
输出: "cdefgab"
  • 示例2
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"

1.3 条件限制

1 <= k < s.length <= 10000


二、题解

2.1 自己的代码实现

基本思路:字符串遍历拼接,先向建立的数组容器中,加入原有容器中n至最后一位数据,然后在容器末尾加入第0至n-1个数据

class Solution {
public:
    string reverseLeftWords(string s, int n) {
    //函数的返回值是一个字符串,输入是一个字符串,和旋转的位数
		·//思路,建立一个新的容器去接收交换后的字符串 
    string s1;

    int len = s.size();

    for(int i = n; i < len; i++)
    {
        s1.insert(s1.end(),s[i]);
    }

    for(int j = 0; j < n; j++)
    {
        s1.insert(s1.end(),s[j]);
    }

    return s1;


    }
};

结果分析:执行时间20ms,内存消耗7.6MB

2.2 参考解法1

class Solution {
public:
    string reverseLeftWords(string s, int n) {
    //返回值是一个字符串,输入的参数是一个字符串和旋转的位数

     return (s+s).substr(n,s.size());

    }
};

结果分析:运行时间8ms,内存消耗7.6MB

2.2 参考解法

思路:字符串切片法

class Solution {
public:
    string reverseLeftWords(string s, int n) {
    //返回值是一个字符串2.,输入的参数是一个字符串和旋转的位数

     return s.substr(n,s.size()) + s.substr(0,n);

    }
};

结果分析:运行时间4ms,消耗内存7.8MB

2.3 参考解法3

思路:取余的方法

class Solution {
public:
    string reverseLeftWords(string s, int n) {
    //返回值是一个字符串,输入的参数是一个字符串和旋转的位数

     string res;

     int tmp = 0;

     for(int i = n; i < n + s.size(); i++)
     {
         tmp = i % s.size();
         res.insert(res.end(),s[tmp]);
     }

     return res;

    }
};

结果分析:执行时间16ms,消耗内存7.3MB


更多有关于Linux C++后台开发的学习分享,感兴趣的朋友们可以关注我的个人公众号
在这里插入图片描述


版权声明:本文为weixin_45615071原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。