小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且
每道题小编当时都总结了一种最适合面试时手撕算法的最优解法
。
考虑到
剑指offer算法题在面试中的高频出现
,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是
第043
道剑指offer算法题:
题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!分析:
整个题目可以转换为:一个字符串换由:XY组成(X和Y是整个字符串的两段),现在如何将字符串变为YX?这道题的解法很多,下面分享一种思路清晰的解法:
- 先对X字符串做旋转(X是前n个字符)
- 再对Y字符串做旋转
- 最后对整体做一次旋转既即可达到目的
public class Solution { // YX = (X'Y')' public String LeftRotateString(String str,int n) { if(str.isEmpty()) return str; int length = str.length(); n = n%length; if(n==0) return str; char[] c = str.toCharArray(); rotate(c,0,n-1);//X'Y rotate(c,n,length-1);//X'Y' rotate(c,0,length-1);//(X'Y')'=(YX) return String.valueOf(c); } private void rotate(char[] s,int low,int high){ int mid = (low+high)>>1; for(;low<=mid;low++,high--){ char tmp = s[low]; s[low] = s[high]; s[high] = tmp; } }}
猜你还想看
有个程序员老公有多爽???
为什么美国程序员工作比中国程序员工作轻松、加班少?张一鸣:我的大学四年收获及工作感悟应届生薪资越来越高:2020互联网大厂平均薪资出炉!!
git 吐血总结:三年 Git 使用心得、总结
长按,扫码,关注
及时收看更多精彩内容
博主:今日头条大数据工程师专注:求职 面经 源码 java 大数据技术分享
点击”阅读原文“:领取5T精品资料,面试总结、100+实战项目
我知道你 “在看”