剑指Offer_编程题——左旋转字符串
题目描述:
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
具体要求:
时间限制: C/C++ 1秒,其他语言2秒
空间限制: C/C++32M,其他语言64M
具体实现:
思路一:
直接用暴力法,从开始截取n位,放到字符串后方。我们用java实现该思路:
public
代码效果图如图所示:
此代码可以在牛客网上可以实现,但是我们如果在本地的话测试结果的话即得加上main函数,具体实现如下:
public
代码测试效果图如下:
接下来我们利用java字符串中的substring方法,只要简单的拼接即可,我们可以用java将其实现:
public
代码效果图如图所示:
代码效果测试如下图所示:
思路二:
(1)先将左边3个字符串进行翻转:abcXYZdef --> cbaXYZdef
(2)再将右边剩余字符串进行翻转:cbaXYZdef --> cbafedZYX
(3)最后将整个字符串进行翻转: cbafedZYX --> XYZdefabc
接下来我们用java将其实现:
public
代码效果图如图所示:
代码测试结果如下图:
思路三:
我们用python中的.join()方法来实现,减少了代码的量。我们用python实现。
class
代码效果图如图所示:
总结
本道题通过汇编语言的计算指数来考察我们对字符串的理解。我们对本题给出了三种解题思路,首先就是暴力解法,对字符串一一对比,接着优化了思路,就是用java中的substring方法,然后接着简单的连接即可,最后就是通过一种简单的反转即可实现,大大提高了运行速度以及缩短了代码量。因此,我们在做题的时候,应该多次尝试各种方法,扩展自己的思维,写出优质的代码。总之,我们要继续加油,争取早日找到工作,Good Luck!!!
参考文献
[1]白马长枪儒雅将
[2]NeoJoe
[3]DarrenXf