---------------题目链接-------------------
---------------解答链接-------------------
1.翻转全部
2.删除空格(快慢指针) 这部分蛮难思考的
- 当slow不是0(为了排除最前面的一个(一堆)空格)时
且ch[fast]不是空格,ch[fast-1]是空格的时候————表示一个单词结束,另一个单词开始,此时给slow加空格再进行赋值- ch[fast]不是空格——不断遍历单词的时候,只需要把fast的值赋给slow即可
- 剩下的就是ch[fast]是空格的时候,那就不操作直接fast++
3.翻转单词
更新数组:char[] newch = Arrays.copyOf(ch, 4);
时间复杂度O(N)
空间复杂度O(N)
class Solution {
public String reverseWords(String s) {
class Solution {
public String reverseWords(String s) {
// 1.翻转全部
// 2.删除空格
// 3.翻转单词
char[] ch = s.toCharArray();
// 1.翻转全部
int left = 0;
int right = ch.length-1;
while(left < right){
ch[left] ^= ch[right];
ch[right] ^= ch[left];
ch[left] ^= ch[right];
left++;
right--;
}
// 2.删除空格(快慢指针) 更新数组
// 慢指针不为0,快指针指向空格 直至遇到下一个字母后 ch[slow++] =' '
int slow = 0;
int fast = 0;
for(; fast < ch.length; fast++){
// 当slow不是0(为了排除最前面的一个(一堆)空格)时,
// 且ch[fast]不是空格,ch[fast-1]是空格的时候————表示一个单词结束,另一个单词开始,此时给slow加空格再进行赋值
if(slow != 0 && ch[fast] != ' ' && ch[fast-1] == ' '){
ch[slow++] = ' ';
ch[slow++] = ch[fast];
}
// ch[fast]不是空格——不断遍历单词的时候,只需要把fast的值赋给slow即可
else if(ch[fast] != ' '){
ch[slow++] = ch[fast];
}
// 剩下的就是ch[fast]是空格的时候,那就不操作直接fast++
}
char[] newch = Arrays.copyOf(ch, slow); // 更新数组
// 3.翻转单词
int left2 = 0;
for(int i = 0; i <= newch.length; i++){
if(i == newch.length || newch[i] == ' ' ){
int right2 = i-1;
while(left2 < right2){
newch[left2] ^= newch[right2];
newch[right2] ^= newch[left2];
newch[left2] ^= newch[right2];
left2++;
right2--;
}
left2 = i+1;
}
}
return new String(newch);
}
}