将一个数组从左开始第几位之前的进行旋转:左旋数组,如:将"abcdef"第2位之前(a为0号位置)进行旋转----> “cdefab”
-
解决思路:
-
将第n位之前需要变换的那部分字符串反转,例中经此变换后:ba cdef
-
然后余下的部分进行反转,例中经此变换后:ba fedc
-
最后整体再进行一次反转,例中经此变换后:cdef ab
-
-
方法实现:
这里,由于String类没有提供指定区间内容反转方法,我们自己写一个myReverse方法来实现。
public static String myReverse(String str,int left,int right) {//指定区间内容反转方法 char[] chars = str.toCharArray(); while(left < right) { char tmp = chars[left]; chars[left] = chars[right]; chars[right] = tmp; left++; right--; } return String.copyValueOf(chars); } public static void leftRotateString(String str,int n){ int index1 = 0; int index2 = n-1; int index3 = n; int index4 = str.length()-1; str = myReverse(str,index1,index2);//例中经此变换后:ba cdef str = myReverse(str,index3,index4);//例中经此变换后:ba fedc str = myReverse(str,index1,index4);//例中经此变换后:cdef ab return str; }
-
测试:
... public static void main(String[] args) { String str = "abcdef"; System.out.println(Work_2019_2_12.leftRotateString(str, 2)); } ...
结果是: