剑指offer58 - 2刷题打卡

简介: 剑指offer58 - 2刷题打卡
题目描述

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

示例 1:

输入: s = "abcdefg", k = 2
输出: "cdefgab"

示例 2:

输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"

限制:

  • 1 <= k < s.length <= 10000
题解思路

思路一

创建额外空间保存左边的字符串,然后对原字符串左移,再把额外空间保存的字符串替换在后边即可

class Solution {
public:
    string reverseLeftWords(string s, int n) {
        int fast = 0;
        int slow = s.size() - n;
        string temp(s.begin(),s.begin()+n);
        for(int i =0;i<s.size()-n;i++){
            s[i]=s[i+n];
        }
        for(int i =slow ;i<s.size();i++){
            s[i] = temp[fast++]; 
        }
        return s;
    }
};

思路二:

不申请任何空间的前提下解题,思路为首先整体翻转,然后根据k分段翻转

class Solution {
public:
    void reverseWords(string &s,int start,int end){
        int left = start;
        int right = end - 1;
        while(left<right){
            swap(s[left++],s[right--]);
        }
    }
    string reverseLeftWords(string s, int n) {
        //思路 先整体翻转  再局部翻转
        //翻转整个字符串
        reverseWords(s,0,s.size());
        //以n为截断处,分别翻转前后两部分
        //翻转前面的部分
        reverseWords(s,0,s.size()-n);
        //翻转后面的部分
        reverseWords(s,s.size() - n,s.size());
        return s;
    }
};


相关文章
|
4月前
剑指offer05刷题打卡
剑指offer05刷题打卡
38 1
|
4月前
|
算法 机器人
剑指offer刷题指南
剑指offer刷题指南
77 0
|
4月前
【一刷《剑指Offer》】面试题 6:重建二叉树
【一刷《剑指Offer》】面试题 6:重建二叉树
|
4月前
【一刷《剑指Offer》】面试题 16:反转链表
【一刷《剑指Offer》】面试题 16:反转链表
|
4月前
剑指Offer(第二版)06
剑指Offer(第二版)06
24 0
牛客网《剑指offer》专栏刷题练习之掌握动态规划思想
牛客网《剑指offer》专栏刷题练习之掌握动态规划思想
118 0
|
算法 Java 测试技术
Leetcode刷题笔记:二分查找算法
LeetCode 对于数组查询算法之一的二分查找算法的简单认识。
95 0
|
移动开发 前端开发 JavaScript
牛客刷题Day4
牛客刷题Day4
88 0
牛客刷题
牛客刷题
83 0
牛客刷题(buhui/(ㄒoㄒ)/~~)
牛客刷题(buhui/(ㄒoㄒ)/~~)
牛客刷题(buhui/(ㄒoㄒ)/~~)