✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📚专栏地址:剑指offer系列题解
📝原题地址:题目地址
📣专栏定位:为找工作的小伙伴整理常考算法题解,祝大家都能成功上岸!
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
题目描述
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
请定义一个函数实现字符串左旋转操作的功能。
比如输入字符串
"abcdefg"
和数字 22,该函数将返回左旋转 22 位得到的结果"cdefgab"
。注意:
- 数据保证 nn 小于等于输入字符串的长度。
数据范围
输入字符串长度 [0,1000][0,1000]。
样例
输入:"abcdefg" , n=2 输出:"cdefgab"
方法一:字符串拼接 O(n)
我们可以利用 C++
自带的函数 substr
对字符串进行拼接,s.substr(int x,int y)
表示从字符串 s
的第 x
个位置起,截取 y
个字符。如果没有 y
,则默认截取 x
以后的所有字符。
class Solution {
public:
string leftRotateString(string str, int n) {
string tail = str.substr(0, n);
string head = str.substr(n);
return head + tail;
}
};
方法二:字符串旋转 O(n)
我们也可以直接用翻转操作得到最终答案,拿 abcdefg
且 n = 2
来举例:
第一步: 旋转整个字符串。
第二步: 再分别旋转两个部分,下标区间为 [0,str.size()-n)
和 [str.size()-n,str.size())
。
class Solution {
public:
string leftRotateString(string str, int n) {
reverse(str.begin(), str.end());
reverse(str.begin(), str.begin() + str.size() - n);
reverse(str.begin() + str.size() - n, str.end());
return str;
}
};
欢迎大家在评论区交流~