【问题描述】
给定一个字符串,逐个翻转字符串中的每个单词。
示例 1:
输入: "the sky is blue"
输出: "blue is sky the"
【解答思路】
1. 双指针
- 倒序遍历字符串
- 确定边界添加单词
- 拼接字符串 返回
时间复杂度:O(N) 空间复杂度:O(N)
class Solution {
public String reverseWords(String s) {
s = s.trim(); // 删除首尾空格
int j = s.length() - 1, i = j;
StringBuilder res = new StringBuilder();
while(i >= 0) {
while(i >= 0 && s.charAt(i) != ' ') i--; // 搜索首个空格
res.append(s.substring(i + 1, j + 1) + " "); // 添加单词
while(i >= 0 && s.charAt(i) == ' ') i--; // 跳过单词间空格
j = i; // j 指向下个单词的尾字符
}
return res.toString().trim(); // 转化为字符串并返回
}
}
作者:jyd
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string/solution/151-fan-zhuan-zi-fu-chuan-li-de-dan-ci-shuang-zh-2/
2. 分割 + 倒序
时间复杂度:O(N) 空间复杂度:O(N)
利用 “字符串分割”、“列表倒序” 的内置函数 (面试时不建议使用)
class Solution {
public String reverseWords(String s) {
String[] strs = s.trim().split("