《剑指Offer》Java刷题 NO.43 左旋转字符串(字符串、库函数、拼接)
传送门:《剑指Offer刷题总目录》
时间:2020-6-26
题目:
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
思路:
利用Java String类自带的函数subString,有两种写法
1.在源字符串后面接上本身,然后取从n位置开始的长度为length的子字符串
2.取从n开始的剩下的子字符串放前面,接上从头开始长度为n的子字符串
注意:
String对象是不可变的,任何change都会产生新的对象,所以字符串拼接最好是用StringBuilder
Java代码:
/**
* @author LiMin
* @Title: LeftRotateString
* @Description: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,
* 请你把其循环左移K位后的序列输出。
* @date 2020/6/2619:53
*/
public class LeftRotateString {
public String leftRotateString(String str, int n) {
if (str == null || str.length() == 0 || n < 0) return "";
if (n == 0) return str;
n %= str.length();//循环右移长度=length时,相当于没有移动
String subleft = str.substring(n);//没移出去的剩下的部分,放在左边
String subRight = str.substring(0, n);//移出去的部分,放在右边
StringBuilder result = new StringBuilder(subleft);
result.append(subRight);
return result.toString();
//第二种方法
// StringBuilder result=new StringBuilder(str);
// result.append(str);
// return result.toString().substring(n,n+str.length());
}
}