zoukankan      html  css  js  c++  java
  • 【LeetCode-字符串】左旋转字符串

    题目描述

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

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

    说明: 1 <= k < s.length <= 10000
    题目链接: https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/

    思路

    方法和旋转数组这题是一样的。步骤如下(假设字符串长度为 n):

    • 对整个字符串进行翻转(在 [0, n-1] 范围内进行翻转);
    • 在 [0, n-k-1] 范围内对字符串进行翻转;
    • 在 [n-k, n-1] 范围内对字符串进行翻转;

    代码如下:

    class Solution {
    public:
        string reverseLeftWords(string s, int k) {
            int n = s.size();
            k %= n;
            reverse(s, 0, n-1);
            reverse(s, 0, n-k-1);
            reverse(s, n-k, n-1);
            return s;
        }
    
        void reverse(string& s, int left, int right){
            while(left<right){
                swap(s[left], s[right]);
                left++;
                right--;
            }
        }
    };
    
    • 时间复杂度:O(n)
    • 空间复杂度:O(1)
  • 相关阅读:
    数据结构
    ADC
    SPI
    定时器原理
    IO中断
    恩智浦样片申请
    UART
    随机生成数字验证码
    判断网络是否连接Internet
    清理SQL数据库日志
  • 原文地址:https://www.cnblogs.com/flix/p/13384609.html
Copyright © 2011-2022 走看看