清晰易懂,简单高效!
大体思路:
每次截取到想要的单词,拼接到新的sb中,过程中伴随双指针进行空格位置指向控制,
其中如果start指针如果==0的情况要放在第一个判断条件防止边界条件失效,并且这种情况下截取的是最后一个单词,此时不需要加额外空格。
java
class Solution {
public String reverseWords(String s) {
s = s.trim();
StringBuilder sb = new StringBuilder();
int end = s.length() - 1;
int start = end;
while(start >= 0){
//这里分四种情况来决定每次截取新的字符串位置
if(start == 0) {
sb.append(s.substring(start, end + 1));
start--;
} else if(s.charAt(start) !=' ') {
start--;
} else if(s.charAt(start) == ' '){
sb.append(s.substring(start + 1, end + 1) + " ");
while(start >=0 && s.charAt(start) == ' ')
start--;
end = start;
} else
start--;
}
return sb.toString();
}
}