zoukankan      html  css  js  c++  java
  • 剑指 Offer 58

    题意

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

    思路

    • 利用线性代数中的矩阵求逆的思想:((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;
        }
    };
    
    如有转载,请注明出处QAQ
  • 相关阅读:
    洛谷[P1002]过河卒
    ACM-Teleportation
    ACM-Team Tic Tac Toe
    Data_Structure04-树
    Data_Structure03-栈和队列
    Data_Structure02-线性表
    Data_Structure01-绪论
    C语言第二次实验报告
    C语言第一次实验报告
    mysql
  • 原文地址:https://www.cnblogs.com/MartinLwx/p/14399168.html
Copyright © 2011-2022 走看看