151 反转字符串里的单词
【题目】
【方法一】 从:"the sky is blue" 得:"blue is sky the" 就是把原始字符串s进行切分为:"the"、"sky"、"is"和"blue"。然后从后往前拼接得到。 按照空格分开可以借助split()函数实现。用多个空格分开可以写为split(" +")或者split("\\s+")。加号表示一个或多个的意思。
代码:
结果:
代码简单是简单,但是慢。。。超级慢。。。
【方法一:改进】 为什么这么慢呢?是因为里面有很多ss=ss+st[i]的操作。String类型是不可变的,来回赋值需要花费很多时间倒腾数据。所以可以改成StringBuffer或者StringBuilder来做。
改进后代码:
结果:
结果明显快了很多。
【方法一:继续改进】 对比了一下其他人的方法,发现split("\\s+")这个操作比较慢。不如改成split(" "),然后再在后面判断是否等于""高效。 split(" ")方法可能产生个"",所以后面需要判断。判断的时候不能用"==",要用queals()函数。
代码:
结果:
【方法二】 从:"the sky is blue" 得:"blue is sky the" 可以通过反转的方法得到: 首先每个单词反转,得到:"eht yks si eulb" 然后整体反转,得到:"blue is sky the"
代码:
结果:
代码比较繁琐,主要是花在前后空格处理、中间空格处理上。 最后效果还是不错。
|