剑指 Offer 58 - II. 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = “abcdefg”, k = 2
输出: “cdefgab”
示例 2:
输入: s = “lrloseumgh”, k = 6
输出: “umghlrlose”
来源:力扣(LeetCode)
链接:https:///problems/zuo-xuan-zhuan-zi-fu-chuan-lcof
class Solution {
public:
string reverseLeftWords(string s, int n) {
reverse(s.begin(),s.begin()+n);
reverse(s.begin()+n,s.end());
reverse(s.begin(),s.end());
return s;
}
};
在C++中,可以使用std::reverse
函数来反转容器(如数组、向量等)中的元素顺序。std::reverse
是C++标准库中的一个算法,它位于头文件<algorithm>
中。使用该函数时,需要包含相应的头文件并传入要反转的容器的起始和结束迭代器。
以下是std::reverse
函数的语法:
#include <algorithm>
template <class BidirectionalIterator>
void reverse(BidirectionalIterator first, BidirectionalIterator last);
参数说明:
first
:容器中要反转的元素的起始迭代器。last
:容器中要反转的元素的结束迭代器。注意,std::reverse
会反转从first
到last - 1
的元素。
函数操作:std::reverse
函数会将容器中的元素按照相反的顺序重新排列。
示例代码:
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::cout << "Original vector: ";
for (int num : numbers) {
std::cout << num << " ";
}
// 反转元素顺序
std::reverse(numbers.begin(), numbers.end());
std::cout << "\nReversed vector: ";
for (int num : numbers) {
std::cout << num << " ";
}
return 0;
}
输出:
Original vector: 1 2 3 4 5
Reversed vector: 5 4 3 2 1
注意:std::reverse
函数适用于支持双向迭代器的容器,如std::vector
、std::deque
等,但不适用于支持只能单向迭代器的容器,如std::forward_list
。对的,std::reverse
函数是左开右闭的,也就是说,它会反转范围内的元素,但不包括结束迭代器所指向的元素。
在std::reverse
函数中,first
参数是要反转范围的起始迭代器,而last
参数是要反转范围的结束迭代器。反转的范围是从first
开始,直到last - 1
为止,也就是说,last
所指向的元素不会被包含在反转范围内。
这种左开右闭的范围约定在C++的标准库中是比较常见的,用于许多算法函数,如std::sort
、std::copy
等。要注意在使用这些函数时,始终确保范围内的迭代器有效且指向合法的元素,以避免未定义行为。