每日一练(32):左旋转字符串


title: 每日一练(32):左旋转字符串

categories:[剑指offer]

tags:[每日一练]

date: 2022/03/07


每日一练(32):左旋转字符串

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1:

输入: s = "abcdefg", k = 2

输出: "cdefgab"

示例 2:

输入: s = "lrloseumgh", k = 6

输出: "umghlrlose"

限制:

1 <= k < s.length <= 10000

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof

方法一:切分

算法流程:

字符串的拼接与旋转有一个挺好的办法 就是将字符串倍增成为两个同样的字符串拼接的长字符串,然后旋转均可

//1
string reverseLeftWords(string s, int n) {
    int len = s.size();
    s += s;
    return s.substr(n, len);
}
//2
string reverseLeftWords(string s, int n) {
    s += s;
    return s.substr(n, s.size() / 2);
}
//3
string reverseLeftWords(string s, int n) {
    return (s+s).substr(n, s.size());
}

方法二:删除

算法流程:

将前k个字符插入字符串,然后将前k个删除即可。空间0(1)

string reverseLeftWords(string s, int n) {
    for (int i = 0; i < s.size(); i++) {
        s.push_back(s[i]);
    }
    s.erase(0, n);
    return s;
}

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容