大话『字符串逆序』

简介: 窗外的大厦,桌子上的水杯,手中的笔。面试官:“先来一点基础的吧,用Java写一个方法,入参是一个字符串,返回逆序后的字符串。”我暗想确实很基础,于是便写下:

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

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

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

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

面试官看了看,说:“写的很好,用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();
}

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

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

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

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

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);
}

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

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

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

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

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

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

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

“第一,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);
}

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

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

相关文章
|
开发工具 数据安全/隐私保护 Android开发
【教程】APP 开发后如何上架?
【教程】APP 开发后如何上架?
|
人工智能 开发工具 git
【AI绘画】Stable Diffusion 客户端搭建
【AI绘画】Stable Diffusion 客户端搭建
407 0
【AI绘画】Stable Diffusion 客户端搭建
|
9月前
|
安全 前端开发 Java
理解 Spring Security 的 HttpMethod 和路径匹配
本文深入解析了Spring Security中`HttpMethod`与路径匹配的使用方法及其常见问题。通过具体示例,阐明了如何针对不同HTTP方法(如GET、POST)和路径(如`/api/products`与`/products`)设置权限,避免用户绕过限制访问核心数据。同时,强调了配置顺序和角色前缀的重要性,并提供了最佳实践,帮助开发者精准控制应用的安全性。
278 1
|
12月前
|
存储 JavaScript 算法
(html在线预览cad图纸插件)网页CAD绘制条形码、二维码的教程
本文介绍了如何在mxcad中绘制条形码和二维码。对于条形码,首先根据应用场景选择合适的编码标准(如CODE39、EAN13等),通过编码规则将数据转换为二进制,并利用`McDbHatch`绘制条和空的组合,同时支持自定义实体及属性管理。 对于二维码,因其能存储更多信息且具备更强纠错能力,采用开源库QRCode.js进行编码处理,再通过`McDbHatch`绘制黑白矩阵,同样封装成自定义实体以便管理和扩展。文中还给出了完整的绘制流程与效果展示,包括创建二维码对象、设置参数、调用绘制方法以及最终的效果图。整个过程体现了灵活运用API与第三方库来实现复杂图形绘制的能力。
|
人工智能 数据处理 Python
🔍数据侦探的AI助手:Prompt技巧大公开,洞察商业先机不手软
【8月更文挑战第1天】在数据驱动时代,AI助手作为数据侦探的强大伙伴,通过精心设计的AI Prompt技巧帮助解析复杂市场。案例中,一电商平台欲进入新兴市场,面临数据挑战。初始Prompt聚焦消费者偏好及影响因素分析。为进一步深化洞察,Prompt加入节假日购物模式、商品类别偏好及社交媒体影响等细节。结合领域知识,优化Prompt关注价格敏感度与定制化营销策略。最终,AI助手生成的报告揭示了消费者行为模式,并提出市场策略建议,助力电商成功布局新兴市场。此过程展示了AI Prompt在商业洞察中的关键作用,预示着其在未来洞察之旅中的广阔前景。
502 2
|
消息中间件 存储 运维
厚积薄发--一文带您了解阿里云消息队列(MNS)
MNS 重点聚焦在基准消息队列的核心能力建设,MNS 经过多年迭代与打磨,尽管内部极为复杂,但一直努力保持其在客户端的简单易用,围绕轻量和集成两个命题,着力建设更易用的消息队列产品。
2441 0
厚积薄发--一文带您了解阿里云消息队列(MNS)
|
人工智能 Cloud Native 算法
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
AI与云数据库的深度结合是数据库发展的必然趋势,基于AI能力的加持,云数据库未来可以实现更快速的查询和决策,帮助企业更好地利用海量数据进行业务创新和决策优化。
数据之势丨AI时代,云原生数据库的最新发展趋势与进展
|
JavaScript 前端开发
在线考试+自动组卷系统
在线考试+自动组卷系统
590 1
基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
基于白鲸优化算法BWO的VMD-KELM光伏发电功率预测(matlab代码+可提供讲解)
|
机器学习/深度学习 存储 自然语言处理
XoT:一种新的大语言模型的提示技术
这是微软在11月最新发布的一篇论文,题为“Everything of Thoughts: Defying the Law of Penrose Triangle for Thought Generation”,介绍了一种名为XOT的提示技术,它增强了像GPT-3和GPT-4这样的大型语言模型(llm)解决复杂问题的潜力。
577 6

热门文章

最新文章