码迷,mamicode.com
首页 > 其他好文 > 详细

[容易]旋转字符串

时间:2016-05-01 14:56:11      阅读:210      评论:0      收藏:0      [点我收藏+]

标签:

题目来源: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 };

[容易]旋转字符串

标签:

原文地址:http://www.cnblogs.com/hslzju/p/5450468.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!