算法:53.翻转字符串

https://www.lintcode.com/problem/reverse-words-in-a-string/description

描述

给定一个字符串,逐个翻转字符串中的每个单词。

说明

单词的构成:无空格字母构成一个单词

输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括

如何处理两个单词间的多个空格?在反转字符串中间空格减少到只含一个

样例

给出s ="the sky is blue",返回"blue is sky the"

思路

方法比较多了,只是要说明中几种情况的处理,

代码

版本一,使用String类的函数进行处理,不用忘了先调用 trim() 去除前后空格,分割正则是 "\\s+"(多一个 \ 是要转义),不要直接使用单个空格的字符串 " " 进行分割。最后还要注意链接的时候会在返回的字符串尾部多一个空格,返回时要注意去掉。

版本二:

这也是一种实现,上面两种实现在字符串较长时都会产生大量的 String 对象,效率上偏低。

一个更高效的版本,代码不复杂。先从源字符串获得 char[] 数据,然后从右向左遍历,查找每个单词,添加到目的 StringBuilder 中。

小结

在需要频繁拼接字符串时使用 StringBuilder 对象是一个较基本的认识了。上面最后一种实现看似比前面两种实现多要求了一个 char[] ,申请了额外的空间,但前面两种实现都会在循环内产生临时的 String 对象,这个对象实际上也是需要额外的空间,频繁的创建释放 String 对象实际上效率是很低的,第三种实现就避免了String对象的创建提高了效率。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180806G1R3N200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券