大话『字符串逆序』
2022/2/11 8:12:28
本文主要是介绍大话『字符串逆序』,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
窗外的大厦,桌子上的水杯,手中的笔。
面试官:“先来一点基础的吧,用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); }
我茅塞顿开,这次面试真的是学到了。
本故事纯属虚构,如有雷同实属巧合。
这篇关于大话『字符串逆序』的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24Java中定时任务实现方式及源码剖析
- 2024-11-24鸿蒙原生开发手记:03-元服务开发全流程(开发元服务,只需要看这一篇文章)
- 2024-11-24细说敏捷:敏捷四会之每日站会
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解