<剑指Offer>面试题58(2): 左旋转字符串

题目描述

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

题目解读

  • 剑指Offer 286

代码

#include
using namespace std;

class Solution {
public:
    string LeftRotateString(string str, int n) {
        // str 非空
        if(!str.empty()){
            if(n > 0 && n <= str.size()){
                int first_left = 0;
                int first_right = n-1;
                int second_first = n;
                int second_right = str.size()-1;

                // 翻转第一部分字符串 
                Reverse(str, first_left, first_right);
                // 翻转第二部分字符串
                Reverse(str, second_first, second_right);
                // 翻转全部字符串
                Reverse(str, first_left, second_right);
            }
        }
        return str;
    }

    void Reverse(string& str, int left, int right){
        while(left < right){
            char temp = str[left];
            str[left] = str[right];
            str[right] = temp;

            left ++;
            right --;
        }
    }    
};

int main(){
    Solution ss;
    // string str = "abcdefg";
    // string s = ss.LeftRotateString(str, 2);

    string str = "abcXYZdef";
    string s = ss.LeftRotateString(str, 3);
    cout<

总结展望

  • 考验思维活跃

你可能感兴趣的:(<剑指Offer>面试题58(2): 左旋转字符串)