• 大话字符串逆序


    窗外的大厦,桌子上的水杯,手中的笔。

    面试官:“先来一点基础的吧,用Java写一个方法,入参是一个字符串,返回逆序后的字符串。”

    我暗想确实很基础,于是便写下:

    public static String reverse(String str) {
        StringBuffer sb = new StringBuffer(str);
        return sb.reverse().toString();
    }
    

    欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。

    面试官看了看,说:“写的很好,用StringBuffer的reverse方法。如果你来实现其中算法,你会怎么写?”

    我直接说:“从最后一个字符开始,一直向前添加字符就可以了。”重新写了一个遍代码:

    public static String reverse(String str) {
        char[] chars = str.toCharArray();
        StringBuilder sb = new StringBuilder();
        for (int i = chars.length - 1; i >= 0; i--) {
            sb.append(chars[i]);
        }
        return sb.toString();
    }
    

    欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。

    面试官看了看,说:“写的很好,逆序的功能完成了。不过再想想,有什么可以优化的地方?”

    我想了想,说:“好像没有什么可以优化的?”

    面试官提示了一句:“比如,采用首尾替换的方式呢?是不是可以减少时间复杂度?”

    我恍然大悟,说:“的确是,我再改一下。”又重新写了一个遍代码:

    public static String reverse(String str) {
        char[] chars = str.toCharArray();
        int n = chars.length - 1;
        for (int i = 0; i <= n / 2; i++) {
            int j = n - i;
            char temp = chars[i];
            chars[i] = chars[j];
            chars[j] = temp;
        }
        return new String(chars);
    }
    

    欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。

    面试官又看了看,说:“写的很好,就是这个思想。不过再想想,有什么可以优化的地方?”

    我左思右想一番,说:“应该没有吧。”

    面试官说:“确定没有了嘛?”

    我肯定地回答:“确定没有了。”

    面试官:“好吧,这个问题先到这。”

    我有点不服气,抢着问到:“您说说,还有什么可以优化的地方?”

    面试官微笑了一下,说:“我认为还有两个地方可以优化。”

    “第一,for循环的布尔表达式里不应该放除2的计算,否则每次循环都会计算一次。”

    “第二,除2的计算可以用右移一位代替,这样效率更高。”

    面试官在我写的代码上改了几笔,就变成了:

    public static String reverse(String str) {
        char[] chars = str.toCharArray();
        int n = chars.length - 1;
        for (int i = (n - 1) >> 1; i >= 0; i--) {
            int j = n - i;
            char temp = chars[i];
            chars[i] = chars[j];
            chars[j] = temp;
        }
        return new String(chars);
    }
    

    欢迎关注微信公众号:万猫学社,每周一分享Java技术干货。

    我茅塞顿开,这次面试真的是学到了。

    本故事纯属虚构,如有雷同实属巧合。

  • 相关阅读:
    pl/sql优化策略 老猫
    游标调用函数 老猫
    oracle性能检测sql语句 老猫
    Oracle高级SQL培训与讲解 老猫
    Oracle执行计划详解 老猫
    SQL中获取树形结构所有子级数据
    纯 CSS 实现的下拉菜单
    Node.JS 异步遍历目录
    Node.JS 的安装与入门
    Node.JS 的模块管理介绍
  • 原文地址:https://www.cnblogs.com/heihaozi/p/11904145.html
Copyright © 2020-2023  润新知