58剑指OFFER之左旋转字符串

参考资料:

[1]参考剑指OFFER书上的思想

关键词:

这个情况要考虑一下。

string a;
if(n>str.size())//这种极情况返回空的字符串
     return a;
思路:

先全部首尾对调,再分别各自对调

自己的解答:
class Solution {
public:
    string LeftRotateString(string str, int n) {
        
        if(str.empty())
            return str;
         string a;
        if(n>str.size())//这种极情况返回空的字符串
            return a;
        //步骤1:首尾全部对调
        Reverse(str,0,str.length()-1);
        //步骤2:部分自己首尾对调
        Reverse(str,0,str.length()-1-n);
        Reverse(str,str.length()-n,str.length()-1);
        return str;
    }
    
    void Reverse(string &str,int begin,int end)
    {
        while(begin<end)
        {
            swap(str[begin++],str[end--]);
        }
    }
};
//思路是啥呢?也不知道这个思路从哪来的
//先全部头尾对调,再各自头尾对调
//前面是size-n进行对调,后面是n个进行对调
标准答案:
class Solution {
public:
    string LeftRotateString(string str, int n) {
        
        //思想很重要:受翻转单词顺序的启发
        //首先翻转前n个,在翻转后面的,然后进行全部翻转
        string a;
        if(n>str.size())//这种极情况返回空的字符串
            return a;
        Reverse(str,0,n-1);
        Reverse(str,n,str.size()-1);
        Reverse(str,0,str.size()-1);
        return str;
    }
    
    void Reverse(string &str,int begin,int end)
    {
        while(begin<end)
        {
            swap(str[begin++],str[end--]);
        }
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。