题解 | #翻转单词序列#
翻转单词序列
http://www.nowcoder.com/practice/3194a4f4cf814f63919d0790578d51f3
使用类似数组向右移动K个位置的题的思路来实现字符串翻转 思路来源于代码随想录
public class Solution {
public String ReverseSentence(String str) {
// 先整体反转,然后在反转每个单词 时间:O(N),空间:O(1)
// 1.反转整个字符串
StringBuilder sb = new StringBuilder(str);
reverseString(sb,0,str.length() - 1);
// 2.反转每个单词
reverseEachWord(sb);
return sb.toString();
}
/**
* 反转整个字符串
*/
public void reverseString(StringBuilder sb,int start,int end){
while(start < end){
char temp = sb.charAt(start);
sb.setCharAt(start,sb.charAt(end));
sb.setCharAt(end,temp);
start++;
end--;
}
}
public void reverseEachWord(StringBuilder sb){
int start = 0;
int end = 1;
int n = sb.length();
while(start < n){
while(end < n && sb.charAt(end) != ' '){
end++;
}
// 扭转单词
reverseString(sb,start,end - 1);
// 更新start和end
start = end + 1;
end = start + 1;
}
}
}