主要思想:
将字符串分为两部分,将前n个字符看成第一部分,后面的所有字符看成第二部分,先分别翻转这两部分,最后在翻转整个字符串即可以实现左旋转字符串。
public class Solution {
public String LeftRotateString(String str, int n) {
//还需考虑对n是否大于字符串的长度
if (str == null || str.length() <= 0 || n < 0) {
return "";
}
//防止内存访问越界
if (n > str.length()) {
return str;
}
int length = str.length();
//包括第0位,但不包括第n位
String substring1 = str.substring(0, n);
String subString2 = str.substring(n, length);
char[] charArray1 = substring1.toCharArray();
char[] charArray2 = subString2.toCharArray();
//对charArray1进行翻转
Reverse(charArray1, 0, charArray1.length - 1);
//对charArray2进行翻转
Reverse(charArray2, 0, charArray2.length - 1);
//将两个字符数组进行拼接,在整体翻转
char[] appendCharArray = new char[charArray1.length + charArray2.length];
for (int i = 0; i < charArray1.length; i++) {
appendCharArray[i] = charArray1[i];
}
for (int i = charArray1.length; i < appendCharArray.length; i++) {
appendCharArray[i] = charArray2[i - charArray1.length];
}
Reverse(appendCharArray, 0, appendCharArray.length - 1);
String s = String.valueOf(appendCharArray);
return s;
}
public char[] Reverse(char[] charArray, int begin, int end) {
if (charArray == null) {
return null;
}
while (begin < end) {
char temp = charArray[begin];
charArray[begin] = charArray[end];
charArray[end] = temp;
begin++;
end--;
}
return charArray;
}