[容易]旋转字符串

题目来源:http://www.lintcode.com/zh-cn/problem/rotate-string/

先贴一个错误的代码,通过了示例,但是没有通过全部案例:

 1 class Solution {
 2 public:
 3     /**
 4      * @param str: a string
 5      * @param offset: an integer
 6      * @return: nothing
 7      */
 8     void rotateString(string &str,int offset){
 9         //wirte your code here
10         string s;
11         string temp;
12         s.assign(str,str.size()-offset,str.size()-1);
13         temp.append(s,0,offset);
14         temp.append(str,0,str.size()-offset);
15         str.swap(temp);
16     }
17 };

需要考虑到offset大于字符串长度的情况。加上offset=offset%str.size();之后还有问题。

没有对字符串为空的情况处理,需要再加上if(str.size()>0)的判断。

可以accept的程序如下:

 1 class Solution {
 2 public:
 3     /**
 4      * @param str: a string
 5      * @param offset: an integer
 6      * @return: nothing
 7      */
 8     void rotateString(string &str,int offset){
 9         //wirte your code here
10         if(str.size()>0)
11         {
12             offset=offset%str.size();
13             string s;
14             string temp;
15             s.assign(str,str.size()-offset,str.size()-1);
16             temp.append(s,0,offset);
17             temp.append(str,0,str.size()-offset);
18             str.swap(temp);
19         }
20     }
21 };

可以Accept的正确程序2:

 1 class Solution {
 2 public:
 3     /**
 4      * @param str: a string
 5      * @param offset: an integer
 6      * @return: nothing
 7      */
 8     void rotateString(string &str,int offset){
 9         //wirte your code here
10         if (str.size()>0) {
11             offset = offset % str.size();
12             str=str.substr(str.size() - offset, offset) + str.substr(0, str.size() - offset);
13             //substr(n1,n2)下标n1开始n2个字符。
14             //用+运算符连接字符串。
15         }
16     }
17 };

可以Accept的正确程序3:

 1 class Solution {
 2 public:
 3     /**
 4      * @param str: a string
 5      * @param offset: an integer
 6      * @return: nothing
 7      */
 8     void rotateString(string &str,int offset){
 9         //wirte your code here
10         if (!str.empty()) {
11             offset %= str.length();
12             reverse(str.begin(), str.begin() + str.length() - offset);
13             reverse(str.begin() + str.length() - offset, str.end());
14             reverse(str.begin(), str.end());
15             //reverse(begin,end);反转[begin,end)区间
16         }
17     }
18 };
posted @ 2016-05-01 14:20  Pearl_zju  阅读(162)  评论(0编辑  收藏  举报