每日一練(32):左旋轉字串
阿新 • • 發佈:2022-03-07
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;
}