首页 > 其他 > 详细

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

时间:2021-02-13 08:32:47      阅读:23      评论:0      收藏:0      [点我收藏+]

题意

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

思路

  • 利用线性代数中的矩阵求逆的思想:\((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. 左旋转字符串

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!