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