字符串的逆序java_大话字符串逆序

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

面试官:“先来一点基础的吧,用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技术干货。

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

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

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值