剑指offer打卡Day11:左旋转字符串

题1:左旋转字符串

题目描述

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

示例1

输入

"abcXYZdef",3

返回值

"XYZdefabc"

解析:

  • 实例分析:

    • 要运用题目左循环的含义:

      说人话就是挤出字符串中的前n位并依次拼接到原字符串后面

      具体过程: 
      输入:abcXYZdef,3      
      
      移动位数	      输入                  输出       
       1			 ·a·bcXYZdef            bcXYZdef·a·
       2           ·b·cXYZdefa	        cXYZdefa·b·
       3			 ·c·XYZdefab		    XYZdefab·c·
       
      输出:XYZdefabc
      
          输入       左移位数                输出
       abcXYZdef       3                XYZdefabc
       abcXYZdef       4                YZdefabcX
       abcXYZdef       6                defabcXYZ
       ...以此类推
      
  • 规律发现:

        输入         左移位数                输出
     (abc)XYZdef       3                XYZdef(abc)
     (abcX)YZdef       4                YZdef(abcX)
     (abcXYZ)def       6                def(abcXYZ)
     ...
    

    根据上述例子总结得:

    左移字符串实际上:将以第n位字符分成两部分,将(0,n)字符串拼接在原字符串后即可。

    • 在Java语言当中 String类中的substring()方法正好满足此要求:

    • substring() 方法返回字符串的子字符串。菜鸟教程

      语法
      public String substring(int beginIndex)
      或
      public String substring(int beginIndex, int endIndex)
      
      参数
      • beginIndex – 起始索引(包括), 索引从 0 开始。
      • endIndex – 结束索引(不包括)。

      在这里插入图片描述

      返回值

      子字符串。

解答:

public String LeftRotateString(String str,int n) {
    if(n > str.length())
        return str;
    //新字符串从第n位字符开始,拼接(0 ~ n-1)位字符
    String s = str.substring(n,str.length()) + str.substring(0,n);
    
    return s;
}

补充:

  • 面试题,请反转一个字符串:即输入"abc123" ,输出“321cba”,尝试下有几种方法?

    //1.用 StringBuffer 或 StringBuilder 的 reverse 方法:
    public static String reverse1(String str) {
        return new StringBuilder(str).reverse().toString();
    }
    
    
    //2. 用 String 的 toCharArray 方法先将字符串转化为 char 类型数组,
    //  然后反向遍历各个字符进行重新拼接:
    public static String reverse2(String str) {
        char[] chars = str.toCharArray();
        String reverse = "";
        for (int i = chars.length - 1; i >= 0; i--) {
            reverse += chars[i];
        }
        return reverse;
    }
    
    //3.用charAt()方法逆向拼接
    public static String reverse3(String str) {
        String reverse = "";
        int length = str.length();
        for (int i = 0; i < length; i++) {
            reverse = str.charAt(i) + reverse;
        }
        return reverse;
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值