剑指 Offer 58 - II. 左旋转字符串

剑指 Offer 58 - II. 左旋转字符串

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

示例 1:

输入: s = “abcdefg”, k = 2
输出: “cdefgab”
示例 2:

输入: s = “lrloseumgh”, k = 6
输出: “umghlrlose”

来源:力扣(LeetCode)
链接:https://leetcode.cn/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++标准库中的一个算法,它位于头文件中。使用该函数时,需要包含相应的头文件并传入要反转的容器的起始和结束迭代器。

以下是std::reverse函数的语法:

#include 

template <class BidirectionalIterator>
void reverse(BidirectionalIterator first, BidirectionalIterator last);

参数说明:

  • first:容器中要反转的元素的起始迭代器。
  • last:容器中要反转的元素的结束迭代器。注意,std::reverse会反转从firstlast - 1的元素。

函数操作:
std::reverse函数会将容器中的元素按照相反的顺序重新排列。

示例代码:

#include 
#include 
#include 

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::vectorstd::deque等,但不适用于支持只能单向迭代器的容器,如std::forward_list。对的,std::reverse函数是左开右闭的,也就是说,它会反转范围内的元素,但不包括结束迭代器所指向的元素。

std::reverse函数中,first参数是要反转范围的起始迭代器,而last参数是要反转范围的结束迭代器。反转的范围是从first开始,直到last - 1为止,也就是说,last所指向的元素不会被包含在反转范围内。

这种左开右闭的范围约定在C++的标准库中是比较常见的,用于许多算法函数,如std::sortstd::copy等。要注意在使用这些函数时,始终确保范围内的迭代器有效且指向合法的元素,以避免未定义行为。

你可能感兴趣的:(字符串)