LeetCode 剑指 Offer 58 - I. 翻转单词顺序

题目描述

剑指 Offer 58 - I. 翻转单词顺序

image-20241107212225657

思路分析

解法一:分割 + 逆序拼接(推荐)

核心思路

  • 先去除首尾空格,并按多个空格分割成单词数组。
  • 逆序拼接单词,中间用单个空格连接。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示字符串长度。
  • 空间复杂度:O(n),用于存储单词数组。
class Solution {
    public String reverseWords(String s) {
        s = s.trim();
        if (s.isEmpty()) {
            return "";
        }

        String[] parts = s.split("\\s+");
        StringBuilder sb = new StringBuilder();

        for (int i = parts.length - 1; i >= 0; i--) {
            sb.append(parts[i]);
            if (i > 0) {
                sb.append(' ');
            }
        }
        return sb.toString();
    }
}
import "strings"

func reverseWords(s string) string {
	parts := strings.Fields(s)
	for i, j := 0, len(parts)-1; i < j; i, j = i+1, j-1 {
		parts[i], parts[j] = parts[j], parts[i]
	}
	return strings.Join(parts, " ")
}

相似题目

题目 难度 考察点
151. 反转字符串中的单词 中等 字符串分割、翻转
557. 反转字符串中的单词 III 简单 逐词翻转
186. 反转字符串中的单词 II 中等 原地操作、双指针
344. 反转字符串 简单 双指针、原地翻转
541. 反转字符串 II 简单 模拟
58. 最后一个单词的长度 简单 字符串遍历
本文作者:
本文链接: https://hgnulb.github.io/blog/2022/92008641
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!