码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2021-02-16 12:14:14      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:return   eve   str   函数实现   左旋转字符串   reverse   span   abc   bcd   

题意

把字符串前面的若干个字符转移到字符串的尾部,要求只用一个函数实现

思路

  • 利用线性代数中的矩阵求逆的思想:\((AB)^{-1} = B^{-1}A^{-1}\)

  • 定义一个函数reverse(s, l, r),将字符串s[l, r]区间内的元素逆置,比如abc变为cba,这个reverse()函数可以自己写或者用STL里的

  • 以题目为例,abcdefg->gfedcba分下面几步

    • 整体逆置:gfedcba
    • 逆置前5位:cdefgba,5 = 字符串长度 - 2
    • 逆置后2位:cdefgab,题目说要左旋转2位
    • 当左旋转的位数 > 字符串的长度的时候,要用%操作

代码

class Solution {
public:
    void rever(string& s, int l, int r) {
        for(int i = l; i <= (l + r) / 2; i++) {
            swap(s[i], s[l + r - I]);
        }
    }
    string reverseLeftWords(string s, int n) {
        n = n % (s.size() + 1);
        rever(s, 0, s.size() - 1);
        rever(s, 0, s.size() - n - 1);
        rever(s, s.size() - n, s.size() - 1);
        return s;
    }
};

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

标签:return   eve   str   函数实现   左旋转字符串   reverse   span   abc   bcd   

原文地址:https://www.cnblogs.com/MartinLwx/p/14399168.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!