问题描述:
给你一个字符串 s
,请你反转字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s
中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s
中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
解题思路:
两次反转,全局反转,局部反转。
中间全部使用字符串自带的函数处理。
代码如下:
class Solution {
//两次反转,全局反转,局部反转
// 使用java本身提供的标准库函数,不想写一堆子方法了,图方便,顺便熟悉熟悉方法。
public String reverseWords(String s) {
StringBuffer strReversed=new StringBuffer(s);
strReversed=strReversed.reverse();
String[] strs=strReversed.toString().split(" ");
StringBuffer result=new StringBuffer();
String word="";
for(int i=0;i<=strs.length-1;i++){
//去掉多余空格,前导空格、尾随空格或者单词间的多个空格
word=strs[i].trim();// 去掉字符串首尾空白符
if(!word.isEmpty()){
result.append(new StringBuffer(word).reverse());
result.append(" ");
}
}
result.deleteCharAt(result.length()-1);//删去最后一个空格字符
return result.toString();
}
}
这道题时间和内存空间都是有优化空间的,但主要是使用字符串本身的函数去处理这个问题,这样写起来更快些。