您的位置:首页 > 其它

【简单】Lintcode 8:Rotate String

2018-01-17 16:27 169 查看
Given a string and an offset, rotate string by offset. (rotate from left to right)

Have you met this question in a real interview? 

Yes

Example

Given 
"abcdefg"
.
offset=0 => "abcdefg"
offset=1 => "gabcdef"
offset=2 => "fgabcde"
offset=3 => "efgabcd"


解题思路:

1、题目中传递的参数是string类型,所以删除插入元素比一般数组方便,降低题目的难度,但也需要知道string类的一些常用成员函数。

2、思路很简单:将末尾元素复制取出来插入到第一个元素前面,然后删除末尾元素。但这里有一个小技巧:当str循环移动了它长度次数时,此时str恢复到未做任何移动的初始状态。

例如:str = "abc",此时str.length() = 3。第一次移动后,str = "cab",第二次移动后,str = "bca",第三次移动后,str = "abc"

3、对于输入参数异常的情况,要在一开始就处理好。

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.empty()) return;
if(offset == 0) return;

for(int i=1;i<=offset%str.length();i++)
{
string a = str;
const char * temp = &a[a.length()-1]; //复制取出最后一位元素
str.insert(0,temp); //将最后一位元素插入第一个位置
str.erase(str.end()-1,str.end()); //删除末尾的一个元素
}
}
};
4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: