您的位置:首页 > 职场人生

剑指offer面试题42_2 左旋转字符串

2017-07-13 15:49 330 查看
主要思想:

将字符串分为两部分,将前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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题 剑指offer