练手系列之旋转字符串

题目如下:

  把字符串前面的若干个字符移动到字符串的尾部。
 例如把字符串abcdef左旋转2位得到字符串cdefab。

贴上java版的实现:

 1 /**
 2      * 整个数组移位
 3      * @param str
 4      * @param k
 5      * @return
 6      */
 7     private static String rotate1(String str, int k) {
 8         if (str == null || str.length() == 0) {
 9             return null;
10         } else if (k == str.length() || k == 0) {
11             return str;
12         }
13         // 防止k大于字符串长度
14         k = k % str.length();
15         char[] chs = str.toCharArray();
16         if (k <= str.length() / 2) {
17             // 左旋转
18             while (k > 0) {
19                 char tmp = chs[0];
20                 for (int i = 0; i < chs.length - 1; i++) {
21                     chs[i] = chs[i + 1];
22                 }
23                 chs[chs.length - 1] = tmp;
24                 k--;
25             }
26         } else {
27             // 右旋转
28             k = chs.length - k;
29             while (k > 0) {
30                 char tmp = chs[chs.length - 1];
31                 for (int i = chs.length - 1; i > 0; i--) {
32                     chs[i] = chs[i - 1];
33                 }
34                 chs[0] = tmp;
35                 k--;
36             }
37         }
38         return String.valueOf(chs);
39     }
40     
41     /**
42      * 字符串翻转
43      * @param str
44      * @param k
45      * @return
46      */
47     private static String rotate2(String str, int k) {
48         char[] chs = str.toCharArray();
49         if (str == null || str.length() == 0) {
50             return null;
51         } else if (k == str.length() || k == 0) {
52             return str;
53         }
54         reverse(chs, 0, k - 1);
55         reverse(chs, k, str.length() - 1);
56         reverse(chs, 0, chs.length - 1);
57         return String.valueOf(chs);
58     }
59     
60     private static void reverse(char[] chs, int start, int end) {
61         while (start < end) {
62             char tmp = chs[start];
63             chs[start] = chs[end];
64             chs[end] = tmp;
65             start++;
66             end--;
67         }
68     }

 

posted @ 2013-10-14 10:55  画水  阅读(264)  评论(0编辑  收藏  举报