58.2 左旋转字符串

NowCoder

题目描述

  1. Input:
  2. S="abcXYZdef"
  3. K=3
  4. Output:
  5. "XYZdefabc"

解题思路

先将 “abc” 和 “XYZdef” 分别翻转,得到 “cbafedZYX”,然后再把整个字符串翻转得到 “XYZdefabc”。

  1. public String LeftRotateString(String str, int n) {
  2. if (n >= str.length())
  3. return str;
  4. char[] chars = str.toCharArray();
  5. reverse(chars, 0, n - 1);
  6. reverse(chars, n, chars.length - 1);
  7. reverse(chars, 0, chars.length - 1);
  8. return new String(chars);
  9. }
  10. private void reverse(char[] chars, int i, int j) {
  11. while (i < j)
  12. swap(chars, i++, j--);
  13. }
  14. private void swap(char[] chars, int i, int j) {
  15. char t = chars[i];
  16. chars[i] = chars[j];
  17. chars[j] = t;
  18. }

58.2 左旋转字符串 - 图1