package jiegouSuanfa;
import java.util.Scanner;
/**
* 给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符'a'和'b'移动到字符串的尾部
* ,使得原字符串变成字符串“cdefab”。
* 请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)
* @author 97699
*
*/
public class ReserveTest {
private static String str="abcdefg";
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int a=sc.nextInt();//输入转移的个数
int n=str.length();
//baoli(a);
reserve(a);
}
/**
* 将字符串分为两部分,每一部分分别翻转,后将整个字符串进行翻转
* 时间O(n)
* @param a
*/
private static void reserve(int a) {
// TODO Auto-generated method stub
int m=str.length();
char[] strc=str.toCharArray();
reserved(strc,0,a-1);//left
reserved(strc,a,m-1);//right
reserved(strc,0,m-1);
System.out.println(strc);
}
/**
*
* @param strc 字符数组
* @param i 需要转移的字符的下标
* @param j
*/
private static void reserved(char[] strc, int i, int j) {
// TODO Auto-generated method stub
int n=j-i;
for(int k=1;k<=n/2;k++) {
char t=strc[i];
strc[i]=strc[j];
strc[j]=t;
i++;
j--;
}
}
/**
* 暴力方法获取,时间O(an)空间O(1)
* @param a
*/
private static void baoli(int a) {
// TODO Auto-generated method stub
char [] strc=str.toCharArray();
for(int i=0;i<a;i++) {
char t=strc[0];
for(int j=0;j<str.length()-1;j++) {
strc[j]=strc[j+1];
}
strc[str.length()-1]=t;
}
System.out.println(strc);
}
}