知识点/数据结构:字符串
题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
思路:方法1
最直接的办法
public class Solution {
public String LeftRotateString(String str,int n) {
//如果字符串长度为0,返回一个空的字符串。
if(str.length()==0){
return "";
}
// int len=str.length();
// n=n%str.length();
//str=str+str;
//return str.substring(n,len+n);
//利用StringBuilder类实例化对象;直接对string进行操作会占用大量的内存。
//sb1->需要操作的原始字符串
//sb2->移动的字符串部分
//sb3->不移动的字符串部分(也可能会是移动了整个字符串的整数倍)
StringBuffer sb1=new StringBuffer(str);
StringBuffer sb2=new StringBuffer();
StringBuffer sb3=new StringBuffer();
//确定实际需要一定多少,因为演1/2圈和3/2是一样的效果。
int x= n%str.length();
//把移动部分放到sb2中
for(int i=0;i<x;i++){
sb2.append(sb1.charAt(i));
}
//把不移动的部分放到sb3中
for(int j=0;j<str.length()-x;j++){
sb3.append(sb1.charAt(x+j));
}
//因为是循环左移:把不移动放在左侧,移动放在右侧;返回
return sb3.append(sb2).toString();
}
}
思路:方法2
public class Solution {
public String LeftRotateString(String str,int n) {
//如果字符串长度为0,返回一个空的字符串。
if(str.length()==0){
return "";
}
String s=str+str;
String result = s.substring(n,str.length()+n);
return result;
}
}