三次翻转
先第一部分翻转,第二部分翻转,再整体翻转
第一部分翻转: ab — ->ba
第二部分翻转: cdefg ----> gfedc
拼接:前面两次翻转bagfedc
整体翻转:cdefgab
class Solution {
public String leftRotateString(String str,int n) {
if(str==null){
return null ;
}
if(str.length()==0){
return “”;
}
if(n>str.length()){
return str;
}
// 转为字符数组
char[] arr =str.toCharArray();
// 前半部分
reverser(arr ,0 ,n-1);//0 前半部分交换
reverser(arr ,n ,arr.length-1);//后半部分交换
reverser(arr ,0 ,arr.length-1); 整体交换
return new String(arr);
/* if(str==null){
return null ;
}
if(str.length()==0){
return "";
}
if(n>str.length()){
return str;
}
String sub1= str.substring(0,n);//前半部分
String sub2=str.substring(n,str.length());
StringBuilder sb= new StringBuilder();
sb.append(sub2);
sb.append(sub1);
return sb.toString();
*/
}
private void reverser(char[] arr ,int start,int end){//0 -0
if(start>=end){
return ;
}
int mid =(start+end+1)/2;
// System.out.println("start "+start +" end "+end);
for(int i=0;start+i<mid;i++){
char temp = arr[start+i];
arr[start+i]=arr[end-i];
arr[end-i]=temp;
}
}
}