🧠 思路总结 1 (Split)
- 把空格切分成
"",这样的话就能通过 长度 进行区分哪些是空格哪些不是
- 所以我们使用
split(" ") 按单个空格将字符串拆分成数组
- 连续空格会被切分成 空字符串
""
- 使用 StringBuilder 拼接结果,最后用
trim() 去掉多余空格
举个例子:
s = " hello world "
切完后: parts = ["", "", "hello", "", "", "world", "", ""]
🧠 思路总结 2 (Two Pointers)
✅ 代码(Java)
1 2 3 4 5 6 7 8 9 10 11 12 13
| class Solution { public String reverseWords(String s) { String[] parts = s.split(" "); StringBuilder sb = new StringBuilder(); for (int i = parts.length - 1; i >= 0; i--){ if (parts[i].length() > 0){ sb.append(parts[i]).append(" "); } } return sb.toString().trim(); } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| class Solution { public String reverseWords(String s) { char[] arr = s.toCharArray(); int n = arr.length;
reverse(arr, 0, n - 1);
int start = 0; while (start < n){ if (arr[start] != ' '){ int end = start; while (end < n && arr[end] != ' '){ end++; } reverse(arr, start, end - 1); start = end; } else { start++; } }
int slow = 0, fast = 0; while (fast < n) { while (fast < n && arr[fast] == ' '){ fast++; } while (fast < n && arr[fast] != ' '){ arr[slow] = arr[fast]; slow++; fast++; } if (fast < n){ arr[slow] = ' '; slow++; } }
return new String(arr, 0, slow).trim(); }
private void reverse(char[] arr, int left, int right) { while (left < right) { char tmp = arr[left]; arr[left] = arr[right]; arr[right] = tmp; left++; right--; } } }
|