思路
以”abcdeftg”为例,我们可以把它分为两个部分,由于想把它的前两个字符一道后面,我们就把前面两个字符分到第一部分,把后面的所有字符都分到第二个部分。我们先反转这两部分,于是就得到了“bagfedc"
,接下来我们再翻转整个字符串,得到了”cdefgab"
刚好就是把原始字符串左旋转2位的结果。
public class LeftRotateString {
//反转字符
public String reverse(String str){
char[] arr = str.toCharArray();
for(int i = 0;i<(arr.length+1)/2;i++){
char temp = arr[i];
arr[i] = arr[arr.length-i-1];
arr[arr.length-i-1]= temp;
}
return String.valueOf(arr);
}
//先反转两部分,然后整个反转
public void leftRotateString(String sentence,int index){
if(sentence == null || index >sentence.length() || index <0)
return;
String[] splitStrings = {sentence.substring(0, index),sentence.substring(index, sentence.length())};
String resultBuffer = "";
for(int i =0;i<splitStrings.length;i++){
splitStrings[i] =reverse(splitStrings[i]);
resultBuffer+=splitStrings[i];
}
System.out.println(reverse(resultBuffer));
}
}