汇编语言输出最长字符串buf2为什么初始化为0_剑指offer算法题043:左旋转字符串...

小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且 每道题小编当时都总结了一种最适合面试时手撕算法的最优解法 考虑到 剑指offer算法题在面试中的高频出现 ,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是 第043 道剑指offer算法题

题目描述

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

分析:

整个题目可以转换为:一个字符串换由:XY组成(X和Y是整个字符串的两段),现在如何将字符串变为YX?这道题的解法很多,下面分享一种思路清晰的解法:

  1. 先对X字符串做旋转(X是前n个字符)
  2. 再对Y字符串做旋转
  3. 最后对整体做一次旋转既即可达到目的
原理: YX = (X'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 使用心得、总结

长按,扫码,关注

及时收看更多精彩内容

ec12a76e8c57575ad1d108ec4a9facc4.png

博主:今日头条大数据工程师专注:求职 面经 源码 java 大数据技术分享

点击”阅读原文“:领取5T精品资料面试总结100+实战项目

我知道你 “在看62c5ce1fb1d846656330f14cca0d8c98.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值