一、前言
本系列文章为《剑指Offer》刷题笔记。
刷题平台:牛客网
书籍下载:共享资源
二、题目
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!😁
1、思路
例如:输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到的结果"cdefgab";
第一步:翻转字符串“ab”,得到"ba";
第二步:翻转字符串"cdefg",得到"gfedc";
第三步:翻转字符串"bagfedc",得到"cdefgab";
或者:
第一步:翻转整个字符串"abcdefg",得到"gfedcba"
第二步:翻转字符串“gfedc”,得到"cdefg"
第三步:翻转字符串"ba",得到"ab"
2、代码
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class Solution { public: string LeftRotateString(string str, int n) { string result = str; int length = result.size(); if(length < 0){ return NULL; } if(0 <= n <= length){ int pFirstBegin = 0, pFirstEnd = n - 1; int pSecondBegin = n, pSecondEnd = length - 1; ReverseString(result, pFirstBegin, pFirstEnd); ReverseString(result, pSecondBegin, pSecondEnd); ReverseString(result, pFirstBegin, pSecondEnd); } return result; } private: void ReverseString(string &str, int begin, int end){ while(begin < end){ swap(str[begin++], str[end--]); } } }; |
Python:
1 2 3 4 5 6 7 8 9 10 | # -*- coding:utf-8 -*- class Solution: def LeftRotateString(self, s, n): # write code here length = len(s) if n <= 0 or length == 0: return s if n > length: n = n % length return s[n:] + s[:n] |
微信公众号
分享技术,乐享生活:微信公众号搜索「JackCui-AI」关注一个在互联网摸爬滚打的潜行者。