面试题58 - II:左旋转字符串(C++)
题目地址:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
题目描述
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
题目示例
示例 1:
输入: s = "abcdefg", k = 2
输出: "cdefgab"
示例 2:
输入: s = "lrloseumgh", k = 6
输出: "umghlrlose"
解题思路
普通法:我们使用三个字符串str1和str2和res,其中str1保存字符串s从n到s.size()-1的所有字符,str2保存字符串s从0到n-1的字符,最后将字符串str1和str2拼接起来,便可得到题目所要求的反转字符串,即res = str1 + str2
标准库:
- Step1:将字符串s中前n个字符取出赋值给str;
- Step2:使用erase函数将字符串s中的前n个字符删除;
- Step3:使用append函数向字符串s中追加str
程序源码
普通法
class Solution { public: string reverseLeftWords(string s, int n) { if(s.size() < 1) return s; string res = "", str1 = "", str2 = ""; for(int i = n ; i < s.size(); i++) { str1 += s[i]; } for(int j = 0; j < n; j++) { str2 += s[j]; } res = str1 + str2; return res; } };
标志库
class Solution { public: string reverseLeftWords(string s, int n) { string str = s.substr(0,n); s.erase(0,n); s.append(str); return s; } };
-----------------------------------
心之所向,素履所往;生如逆旅,一苇以航。
------------------------------------------