Rotate String II
- Lintcode : 1790 / Leetcode :
- Level : Easy
Problem
Given a string(Given in the way of char array), a right offset and a left offset, rotate the string by offset in place.(left offest represents the offset of a string to the left,right offest represents the offset of a string to the right,the total offset is calculated from the left offset and the right offset,split two strings at the total offset and swap positions)。
Example
Example 1:
Input:str ="abcdefg", left = 3, right = 1
Output:"cdefgab"
Explanation:The left offset is 3, the right offset is 1, and the total offset is left 2. Therefore, the original string moves to the left and becomes "cdefg"+ "ab".
Example 2:
Input:str="abcdefg", left = 0, right = 0
Output:"abcdefg"
Explanation:The left offset is 0, the right offset is 0, and the total offset is 0. So the string remains unchanged.
Example 3:
Input:str = "abcdefg",left = 1, right = 2
Output:"gabcdef"
Explanation:The left offset is 1, the right offset is 2, and the total offset is right 1. Therefore, the original string moves to the left and becomes "g" + "abcdef".
Concept & Algorithm
Time Complexity & Space Complexity
time : O(n)
space: O(1)
Answer
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) {
int count = left - right;
if (count == 0) return str;
if (count > 0) {
count %= str.size();
string rotate = str.substr(0, count);
string rest = str.substr(count);
return rest + rotate;
}else {
count = abs(count);
count %= str.size();
string rotate = str.substr(str.size() - count, count);
string rest = str.substr(0, str.size() - count);
return rotate + rest;
}
}
};
沒有留言:
張貼留言