剑指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届找工作求助阵地#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务