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对象的创建提高了效率。
领取专属 10元无门槛券
私享最新 技术干货