无名 发表于 2022-5-8 18:41:21

【HC】左旋转字符串

1. 左旋转字符串

对于一个给定的字符序列 S,把其循环左移 N 位后的序列输出。例如字符序列 S=”abcdef”,输出循环左移3位后的结果,即“defabc”

2. 解法

字符串 S 为abcdef,n=3,设X=abc,Y=def,原字符串可以表示成XY。此时用 T表示翻转, X 的翻转为XT,即XT=cba,同理YT=fed,那么YX=(XTYT)T,三次翻转后可得结果

public String leftRotateString(String str, int n) {
    if (null == str || str.length() == 0 || n == 0 || str.length()cbafed-> defabc

public String leftRotateString(String str, int n) {
   if (null == str || str.length() == 0 || n == 0 || str.length()n) {
         return str;
   }
   Queue q = new ArrayBlockingQueue(str.length());
   char[] a = str.toCharArray();
   int len = a.length;
   for (int i = 0; ilen; i++) {
         q.add(a); // 1. fedcba
   }

   for (int j = 0; jn; j++) {
         q.add(q.poll()); // 2. cbafed
   }
   StringBuilder sb = new StringBuilder();
   for (int k = 0; klen; k++) {
         sb.append((char) q.poll()); // 3. defabc
   }
   return sb.toString();
    }
http://cdn.u1.huluxia.com/g3/M01/36/E5/wKgBOV3H1EOAJWDsAAB7c6R6rKQ721.jpg
页: [1]
查看完整版本: 【HC】左旋转字符串