zoukankan      html  css  js  c++  java
  • 练手系列之旋转字符串

    题目如下:

      把字符串前面的若干个字符移动到字符串的尾部。
     例如把字符串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     }
  • 相关阅读:
    用于视频行为识别的双流卷积网络
    python更改默认版本
    ubuntu16安装ROS(包括win10子系统ubuntu同样能用)
    js中的new做了什么?
    Promise是什么?
    滚动轴 scroll
    什么是ES6?
    什么是token及怎样生成token
    mongodb 删库跑路
    css如何设置背景图片?background属性添加背景图片
  • 原文地址:https://www.cnblogs.com/huashui/p/java.html
Copyright © 2011-2022 走看看