您的位置:首页 > 其它

字符旋转问题-Rotate the string

2018-01-20 21:19 225 查看
Problem 4:

Given
a string and an offset, rotate string by offset. (rotate from left to right)

Example

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


解析:第一次我按字符考虑,想要走for循环,果真Time Error,一个case都没跑过:

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
while(offset>0){
int x = str.length();
char m = str.at(x-1);
for(int i = x-1 ; i>0;i--){
str[i] = str[i-1];
}
str[0] = m;
}

}
};

然后我就去翻c++ string库的函数了... 再观察case规律发现,只是相对位置发生了变化,本质上是将原字符串根据offset拆分成前后两片,再调换位置的过程,所以写了下面的代码:
class Solution {
public:
/*
* @param str: An array of char
* @param
4000
offset: An integer
* @return: nothing
*/
void rotateString(string &str, int offset) {
// write your code here
int x = str.length();
string sub_1 = str.substr(x-offset,offset);
string sub_2 = str.substr(0,x-offset);
sub_1 += sub_2;
str = sub_1;
}
};结果跑到一半就跪了,看到case是这样的:



嗯...果然自己想得不周到,加上了

offset
= offset%x;进行处理,后来又在一个空字符串上坑了一把,最后AC的代码如下:

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

int x = str.length();
if(x > 0){
offset = offset%x;
string sub_1 = str.substr(x-offset,offset);
string sub_2 = str.substr(0,x-offset);
sub_1 += sub_2;
str = sub_1;
}
}
};感悟:多看函数库,把程序方方面面想到,尽量一把AC,摒弃for循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐