8.旋转字符串 题解 Lintcode

8.旋转字符串 题解 Lintcode

hash070 319 2022-01-25

这种旋转字符串的题目可以使用暴力解法,也可以使用简单的字符串拼接方法来实现,主要是考察和训练考生能不能从中寻得一般规律并使用c++标准库中的方法来解决问题。

题目难度:esay

题目通过率:28%

描述

给定一个字符串str和一个偏移量,根据偏移量原地旋转字符串(从左向右旋转)。
对于不同的语言,str将以不用的形式给出,例如对于字符串 "abc" ,将以下面的形式给出

  • Java: char[] str = {‘a’, ‘b’, ‘c’};
  • Python:str = [‘a’, ‘b’, ‘c’]
  • C++:string str = “abc”;

offset >= 0

str的长度 >= 0

原地旋转意味着需要在函数中更改字符串s。你不需要返回任何东西。样例

样例 1:

输入:

str = "abcdefg"
offset = 3

输出:

"efgabcd"

解释:

注意是原地旋转,即str旋转后为"efgabcd"

题目解析

  1. 首先获得字符串的实际偏移量,因为偏移两周和偏移三周结果是一样的。
  2. 将原本的字符串使用sbustr方法获得分别获得子字符串,然后拼接即可
        offset = offset % str.size();
        str = str.substr(str.size() - offset, offset) +
                str.substr(0, str.size() - offset);

所以本题题解为

class Solution {
public:
    /**
     * @param str: An array of char
     * @param offset: An integer
     * @return: nothing
     */
    void rotateString(string &str, int offset) {
        // write your code here
        if (str.size() == 0)
            return;
        offset = offset % str.size();
        str = str.substr(str.size() - offset, offset) +
        str.substr(0, str.size() - offset);
    }
};