写在前面:
这道问题与上一篇博客类似,大家可以先参考一下(http://blog.youkuaiyun.com/may_3/article/details/79358590),那么这道问题的解题思路是,将整个字符串分为两部分:
第一部分:前k个字符(也就是要左移的字符串),第二部分:后面的所有字符。
代码实现:
public String LeftRotateString(String str, int n) {
if (str.length() == 0) {
return "";
}
// 分成两部分
String[] spilt = { str.substring(0, n), str.substring(n, str.length()) };
String result = "";
// 分别反转数组的两部分,组成一个新的字符串
for (String i : spilt) {
i = resverse(i);
result += i;
}
// 最后整体反转
return resverse(result);
}
private String resverse(String str) {
char[] array = str.toCharArray();
char temp;
for (int i = 0; i < array.length / 2; i++) {
temp = array[i];
array[i] = array[array.length - 1 - i];
array[array.length - 1 - i] = temp;
}
return String.valueOf(array);
}
此外,还有一种较为取巧的方式,也为大家展现一下:
public String LeftRotateString(String str, int n) {
if (str.length() == 0) {
return "";
}
// 分割字符串
String s1 = str.substring(0, n);
String s2 = str.substring(n, str.length());
return s2 + s1;
}
这种方式是利用了字符串的截取+拼接,可能并不适用于其他的题目,所以建议选择上面的方式。