字符串循环左移算法

声明: 本总结仅为个人学习总结,以防止遗忘而作,不得转载和商用。
题目要求:
给定一个字符串S[0...N-1],要求把S的前k个字符移动到S的尾部,如把字符串"abcdef"前面的2个字符'a','b'移动到字符串的尾部,得到新字符串"cdefab":即字符串循环左移k, 循环左移n+k位和k位的效果相同(另:循环左移k位等价于循环右移n-k位)
算法要求: 时间复杂度O(n),空间复杂度O(1)

/**
* 字符串循环左移
* 给定一个字符串S[0...N-1],要求把S的前k个字符移动到S的尾部,如把字符串"abcdef"前面的2个字符'a','b'移动到字符串的尾部,得到
* 新字符串"cdefab":即字符串循环左移k
* 循环左移n+k位和k位的效果相同(另:循环左移k位等价于循环右移n-k位)
* 算法要求: 时间复杂度O(n),空间复杂度O(1)
*/
public class LeftReverseString {

  public static void main(String[] args) {
      String string = "abcdef";
      char[] cs = string.toCharArray();
      leftRatateString(cs, cs.length, 2);
      for (char c : cs) {
          System.out.print(c + ", ");
      }
      System.out.println();
  }
  /**
   * 类似矩阵: (X'Y')' = YX
   * 如: abcdef
   * X=ab X'=ba
   * Y=cdef Y'=fedc
   * (X'Y')'=(bafedc)'=cdefab
   * @param s
   * @param from
   * @param to
   */
  public static void reverseString(char[] s, int from, int to){
      while(from

你可能感兴趣的:(字符串循环左移算法)