思路挺简单的
自己想的,步骤挺复杂的
- 先统计处开头和结尾的空格数
- 跳过开头这些空格,将单词放到数组中
- 统计最后一个可能漏过的单词(例如:"hello word",没有空格退出)
- 倒序输出
java
public String reverseWords(String s) {
int n = s.length();
int startCnt = 0;
int endCnt = n-1;
while(startCnt < n){
if(s.charAt(startCnt) == ' '){
startCnt++;
} else {
break;
}
}
while(endCnt >= 0){
if( s.charAt(endCnt) == ' '){
endCnt--;
} else{
break;
}
}
String[] words = new String[n];
int cnt = -1;
int inWord=0;
int startIndex = 0;
for(int i = startCnt; i <= endCnt ; i++){
if(s.charAt(i) == ' '){
if(inWord == 1){
words[++cnt] = s.substring(startIndex, i);
}
inWord = 0;
}else{
if(inWord == 0){
startIndex = i;
}
inWord = 1;
}
}
// 处理最后一个未处理的单词
if(inWord == 1){
words[++cnt] = s.substring(startIndex, endCnt+1);
}
StringBuilder sb = new StringBuilder();
for(int i = cnt ; i>=0 ; i--){
sb.append(words[i]);
if(i != 0){
sb.append(" ");
}
}
return sb.toString();
}
用API
java
public String reverseWords2(String s) {
s = s.trim();
String[] split = s.split("\\s+");
List<String> wList = Arrays.asList(split);
Collections.reverse(wList);
return String.join(" ", wList);
}