这种旋转字符串的题目可以使用暴力解法,也可以使用简单的字符串拼接方法来实现,主要是考察和训练考生能不能从中寻得一般规律并使用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"
题目解析
- 首先获得字符串的实际偏移量,因为偏移两周和偏移三周结果是一样的。
- 将原本的字符串使用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);
}
};