本文为剑指 offer 系列第四十二篇。
主要知识点为字符串,非常简单,都没啥值得说的。
题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
解题思路
这里其实有三种情况需要考虑,
- K等于字符串的长度: 这个时候可以直接返回原来的字符串。
- K小于字符串的长度: 这个时候相当于对于原来的字符串进行截取,一段是前面K位,一段是剩下的。然后左右置换重新拼接即可。
- K大于字符串的长度: 这个时候实际上相当于已经左移一圈了,继续左移实际上最后效果相当于左移
K = K % len.
然后该情况就变成了第二种情况。
本题目给的测试用例不是很好,或者说题目意思说的不明确,当循环左移到头之后怎么办呢?是直接返回,还是按照循环左移这个名字来真的循环呢?两种理解都可以过所有样例,感觉题目出的非常不好。
解题代码
1 | class Solution { |
时间复杂度为O(n),空间复杂度为O(n)
以上,本题结束!