当前位置: 首页 > 后端技术 > Java

大话“串反序”

时间:2023-04-01 23:35:03 Java

窗外的楼,桌上的水杯,手里的笔。面试官:“我们先从一些基础开始,用Java写一个方法,入参是一个字符串,把字符串倒序返回。”我心想这真的很基础,所以我写道:publicstaticStringreverse(Stringstr){StringBuffersb=newStringBuffer(str);returnsb.reverse().toString();}面试官看了说:“写的很好,用StringBuffer的reverse方法,如果实现算法,你会怎么写?”我直接说:“从最后一个字开始,往前加字就行了。”我再次重写了代码:publicstaticStringreverse(Stringstr){char[]chars=str.toCharArray();StringBuildersb=newStringBuilder();对于(inti=chars.length-1;i>=0;i--){sb.append(chars[i]);}returnsb.toString();}面试官看了说:“写的很好,倒序功能完成了。但是再想一想,还有什么可以优化的?”我想了想说:“好像没有什么可以优化的?”面试官提了一句:“比如,把头和尾换掉怎么样?能不能降低时间复杂度?”我恍然大悟,道:“确实如此,我再改一次。”"又写了一遍代码:publicstaticStringreverse(Stringstr){char[]chars=str.toCharArray();intn=chars.length-1;for(inti=0;i<=n/2;i++){intj=n-i;chartemp=chars[i];chars[i]=chars[j];chars[j]=temp;}returnnewString(chars);}面试官看完再看,他说,“写得很好,就是这个想法。但是再想一想,有什么可以优化的?”我想了想说:“我猜没有。”面试官说:“你确定没有了?”面试官:“嗯,这个问题先到这里。我有些不服气,赶紧问道:“你说吧,还有什么可以优化的吗?””面试官笑着说:“我觉得还有两个地方可以优化。""首先,for循环的布尔表达式中不要包含除以2的计算,否则每次循环都会计算一次。”“二、除以2的计算可以换成右移,效率更高。“面试官对我写的代码做了一些改动,变成了:publicstaticStringreverse(Stringstr){char[]chars=str.toCharArray();intn=chars.length-1;for(inti=(n-1)>>1;i>=0;i--){intj=n-i;chartemp=chars[i];chars[i]=chars[j];chars[j]=temp;}returnnewString(chars);}恍然大悟,这次面试我真的学到了东西,这个故事纯属虚构,如有雷同,纯属巧合。