zoukankan      html  css  js  c++  java
  • 字符串反转

    你可以用相关的接口来定义这道题,里面有一个未实现的方法。

    public interface Reverser {

      public String reverse(String str);

    }

    在Java中,最好的实现就是用JDK中StringBuffer的反转方法,它不仅速度快,效率高,而且还知道如何处理unicode代理对(surrogate pairs)。其它方案基本上都可以忽略掉。

    public class JdkReverser implements Reverser {

           public String reverse(String str) {

                if ((null == str) || (str.length() <= 1)) {

                    return str;

                }

                return new StringBuffer(str).reverse().toString();

            }

    }

    处理问题:

    问他代码中什么地方有bug,即使没有。或者代码怎么会报错,他的答案至少可以引出一个讨论关于如何处理空值的话题来。

    返回null

    返回“”

    抛出NullPointerException

    抛出IllegalArgumentException

     第二个讨论的焦点是是如何去优化解决方法,像返回字符串本省“”,长度为1的字符串(本省就是反转)

     更多的方案:

    在适当的位置调动StringBuffer:

    public String reverse(String str) {

                if ((null == str) || (str.length()  <= 1 )) {

                    return str;

                }

                StringBuffer result = new StringBuffer(str);

                for (int i = 0; i < (str.length() / 2); i++) {

                    int swapIndex = str.length() – 1 – i;

                    char swap = result.charAt(swapIndex);

                    result.setCharAt(swapIndex, result.charAt(i));

                    result.setCharAt(i, swap);

                }

                return result.toString();

            }

    采用调用数组的方法:

    public String reverse(String str) {

              if ((null == str) || (str.length() <= 1)) {

                  return str;

              }

              char[] chars = str.toCharArray();

              int right = chars.length – 1;

              for (int left = 0; left < right; left++) {

                  char swap = chars[left];

                  chars[left] = chars[right];

                  chars[right--] = swap;

              }

              return new String(chars);

          }

    SringBuffer追加的方法:

    public String reverse(String str) {

              if ((null == str) || (str.length() <= 1)) {

                  return str;

              }

              StringBuffer reverse = new StringBuffer(str.length());

              for (int i = str.length() – 1; i >= 0; i–) {

                reverse.append(str.charAt(i));

              }

              return reverse.toString();

          }

      }

  • 相关阅读:
    Ilya Muromets(DP or 思维)
    2018 焦作网络赛 L Poor God Water ( AC自动机构造矩阵、BM求线性递推、手动构造矩阵、矩阵快速幂 )
    上下界的网络流模板
    计蒜客 2018南京网络赛 I Skr ( 回文树 )
    回文树 / 自动机模板
    Nowcoder 练习赛26 D xor序列 ( 线性基 )
    线性基模板
    Tarjan求强连通分量、求桥和割点模板
    Nowcoder 挑战赛23 B 游戏 ( NIM博弈、SG函数打表 )
    第二类斯特林数模板
  • 原文地址:https://www.cnblogs.com/wuxiang/p/3541306.html
Copyright © 2011-2022 走看看