题目描述

左旋转字符串_剑指Offer58II

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//剑指 Offer 58 - II. 左旋转字符串
public class ZuoXuanZhuanZiFuChuanLcof_JZOffer58II {
public static void main(String[] args){
System.out.println(new Solution().reverseLeftWords("abcdefg",2));
}
}

class Solution {
public String reverseLeftWords(String s, int n) {
StringBuilder res = new StringBuilder(s);
reverse(res, 0 , n - 1);
reverse(res, n , s.length() - 1);
reverse(res, 0 , s.length() - 1);
return res.toString();
}

public void reverse(StringBuilder s, int start, int end){
while ( start < end) {
char temp = s.charAt(start);
s.setCharAt(start++, s.charAt(end));
s.setCharAt(end--, temp);
}
}
}

个人总结

  1. 其实反转用 StringBuilder 和 char都可以。这也是常见的两种实现方式。

  2. 要求是空间复杂度为O(1)

  3. 这个和上一个题目很像,总的思路就是:

    • 先反前 n 个
    • 再反后面的
    • 最后大家一起反一个

    你试试,真的就好了。