剑指offer:左旋转字符串
定义了个返回值为字符串型的LeftRotateString,有两个参数str和n,先检查字符串的长度是否小于等于1,是的话返回字符串本身,当然会出现n的值比字符串还要长,所以要取余,后构造了一个函数将字符转换成字符向量,然后遍历小于n的位数的值,全加入到temp的后面,将这个得到的字符串赋值给原字符串,return std::move(str);这句话是用右值引用的方式返回,因为过长的字符串在传递的过程中会出现问题!!!
class Solution { public: string LeftRotateString(string str, int n) { int len = str.size(); if(len<=1) return str; n=n%len; vector<char> temp(str.begin(),str.end()); for(int i =0;i<n;++i){ temp.push_back(str[i]); } str.assign(n+temp.begin(),temp.end()); return std::move(str); } };
这个前部分差不多,就是把字符串复制,用substr函数,重新取字符串,(n,len),n为指定的开始位置,len为字符串的长度!!!
class Solution{ public: string LeftRotateString(string str,int n){ int len=str.size(); if(len==0) return str; if(n>=len) n=n%len; str+=str; return str.substr(n,len); } };#剑指offer##23届找工作求助阵地#