思路:先去除头尾空格,在然后去掉中间多余空格,最后从后往前遍历,输出。上代码:
class Solution {
public String reverseWords(String s) {
if(s.equals("")){return "";}
int count = 0;
for(int i = 0; i < s.length(); i++){
if(s.charAt(i) == ' '){
count++;
}
if(count == s.length()){
return "";
}
}
if(s.charAt(0) == ' '){
for(int i = 0; i < s.length(); i++){
if(s.charAt(i)!=' '){
s = s.substring(i);
break;
}
}
}
if(s.charAt(s.length()-1) == ' '){
for(int i = s.length()-1; i >= 0; i--){
if(s.charAt(i)!=' ' ){
s = s.substring(0,i+1);
break;
}
}
}
s = s.replaceAll("\\s+", " ");
int pre = s.length();
String res = "";
for(int i = s.length()-1; i >= 0; i--){
if(i == 0){
res = res + s.substring(0,pre);
}
if(s.charAt(i)== ' '){
res = res + s.substring(i+1,pre) + " " ;
pre = i;
}
}
return res;
}
}
下面给出官方解答,思路一样,做法更简单,直接调用函数,不需要自己造轮子:
class Solution {
public String reverseWords(String s) {
// remove leading spaces
s = s.trim();
// split by multiple spaces
List<String> wordList = Arrays.asList(s.split("\\s+"));
Collections.reverse(wordList);
return String.join(" ", wordList);
}
}
总结:
- 一个空格占两个字符
- 使用replaceAll("\s+", " ")来消除多余空格
- s.trim()消除头尾空格
- list没有reverse方法,但是可以用collection.reverse(list)