标签:
题目来源: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