第一种解法
public class Solution {
//在做这道题的时候,首先先将字符串转换为字符数组的形式,写一个函数进行一次左移,
//在主函数中我们可以通过左移次数来进行循环左移在循环体中调用刚才写好的一次左移方法。
public static void swap(char[] ch){
char tmp = ch[0];//这里代表的是提前将要左移的字符取出来放到tmp临时变量中去,以方便后面的字符能够左移。
int i =0;
for(;i<ch.length-1;i++){
ch[i] = ch[i+1];//这里的意思是将数组中的每位都向前挪动一位,给左移过来的字符腾出位置
}
ch[i] = tmp;
}
public String LeftRotateString(String str,int n) {
if(str.length() ==0||n<=0){
return str;
}
int k = n%str.length();
char[] ch = str.toCharArray();
while(k>0){
swap(ch);
k–;
}
return new String(ch);
}
}
第二种解法
public class Solution {
public static void swap(char[] ch ,int start,int end){
while(start<end){
char tmp = ch[end];
ch[end] = ch[start];
ch[start] = tmp;
start++;
end--;
}
}
public String LeftRotateString(String str,int n) {
if(str.length()==0||n<=0){
return str;//判断要不要移动str
}
n %= str.length();//不管什么方法都要进行取余运算,这样大大减少了移动次数
//举个例子我们的n=11,也就是要移动的次数是11,而我们字符串的长度是5
//此时如果不取余的话就多移动了1次,因为对于长度为5的字符串挪动十次也就相当于
//之挪动1次而已。
char[] ch = str.toCharArray();
swap(ch,0,n-1);
swap(ch,n,ch.length-1);
swap(ch,0,ch.length-1);
return new String(ch);
}
}