每日一練(32):左旋轉字串

加班猿發表於2022-03-12

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/probl...

方法一:切分

演算法流程:

字串的拼接與旋轉有一個挺好的辦法 就是將字串倍增成為兩個同樣的字串拼接的長字串,然後旋轉均可

//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;
}

相關文章