题目描述
给出一个字符串(以字符数组形式给出),一个右偏移和一个左偏移,根据给出的偏移量循环移动字符串,并保存在一个新的结果集中返回。
思路
左右偏移,实际上只需偏移一次。因此两次相减即得到实际的偏移。需要注意的是得到的偏移可能为负数,以及偏移可能大于字符串长度。
C++代码
class Solution {
public:
/**
* @param str: An array of char
* @param left: a left offset
* @param right: a right offset
* @return: return a rotate string
*/
string rotateString2(string &str, int left, int right) {
// write your code here
const int32_t len = str.size();
int32_t offset = (left - right) % len;
if (offset < 0) {
offset += len;
}
return std::string(&str[offset], &str[len]) + std::string(&str[0], &str[offset]);
}
};