class Solution {
public String reverseWords(String s) {
// 翻转所有的单词,非空格字符分割单词,两个单词间有着至少一个空格,之前翻转是按照单词中字母进行翻转,本题中需要将字符串中的所有单词按照在字符串中的顺序进行翻转,但是不改变单词的构成
int length = s.length();
// 先找到所给字符串中每一个单词的开始位置并记录,同时也找到每个单词的结束位置
int[] startPos = new int[length];
int startPosIndex = 0;
int[] endPos = new int[length];
int endPosIndex = 0;
String result = "";
int wordsCount = 0;
for(int i = 0; i < length; i++){
char single = s.charAt(i);
if((i == 0 || s.charAt(i-1) == ' ') && single != ' '){
startPos[startPosIndex] = i;
startPosIndex += 1;
wordsCount += 1;
}
if((i == length - 1 || s.charAt(i+1) == ' ') && single != ' '){
endPos[endPosIndex] = i;
endPosIndex += 1;
}
}
for(int j = wordsCount-1; j >= 0; j--){
String word = s.substring(startPos[j],endPos[j]+1);
result += word;
result += " ";
}
return result.substring(0,result.length()-1);
}
}
不熟悉的点:
string.trim()
作用是去除字符串首尾的空格