题目
给你一个字符串 s ,颠倒字符串中 单词 的顺序。
单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。
注意:输入字符串 s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-words-in-a-string
首先这个就是把单词的顺序给翻转,比较简单的办法就是split函数把它们弄到字符数组里,再考虑调转顺序
之后代码是这样的
class Solution {
public String reverseWords(String s) {
String[] s1 = s.split(" ");
StringBuffer sb = new StringBuffer();
for(int i =s1.length-1;i>=0;i--){
sb.append(s1[i]);
if(i==0){
break;
}
sb.append(" ");
}
String s2 = sb.toString();
return s2;
}
}
但运行时出现了这个问题
这里发现问题是用一个空格作为分割,但有的是两个空格,去掉一个还有一个空格,而输出要求的是有只能有单个空格
那怎么处理呢?
String[] s1 = s.split(" +");
这么改,就可以匹配多个空格·,但之后又有一个问题:
这种头尾有空格的,就会无法解决,会在尾部带一个空格
于是又改为这句
String[] s1 = s.trim().split(" +");
运行通过,但性能较差,估计是因为翻转的方法是自己写的,而实际可以调reverse方法