剑指offer58-2(反转字符串)

题目:

  左旋转字符串,即把字符串前面的若干字符转移到字符串的尾部。如输入“abcdefg”和数字2,输出“cdefgab”。

思路:

  先整体反转字符串,然后局部反转。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public String LeftRotateString(String str,int n) {
if (str == null || n < 0) {
return null;
}
if (str.length() == 0) {
return "";
}
char[] s = str.toCharArray();
reverse(s, 0, s.length - 1);
reverse(s, 0, s.length - n - 1);
reverse(s, s.length - n, s.length-1);
return new String(s);
}
public static void reverse(char[] arr,int low,int high) {
while(low < high) {
char temp = arr[low];
arr[low] = arr[high];
arr[high] = temp;
low++;
high--;
}
}

复杂度分析及总结:

循环:

  时间复杂度:
    O(n)。
  空间复杂度:
    O(1)。