清晰易懂,简单高效!
大体思路:
每次截取到想要的单词,拼接到新的sb中,过程中伴随双指针进行空格位置指向控制,
其中如果start指针如果==0的情况要放在第一个判断条件防止边界条件失效,并且这种情况下截取的是最后一个单词,此时不需要加额外空格。
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;} elsestart--;}return sb.toString();}
}