LeetCode 151. 反转字符串中的单词

题目描述

151. 反转字符串中的单词

image-20230305134732842

思路分析

解法一:去空格 + 反向拼接(推荐)

核心思路

  • 先扫描字符串,提取每个单词(忽略多余空格)。
  • 再从后往前拼接单词,单词之间添加一个空格。
  • 只进行一次线性遍历与拼接。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示字符串长度。
  • 空间复杂度:O(n),用于存储单词列表与结果。
import java.util.*;

class Solution {
    public String reverseWords(String s) {
        List<String> words = new ArrayList<>();
        int i = 0;
        int n = s.length();

        while (i < n) {
            while (i < n && s.charAt(i) == ' ') {
                i++;
            }
            if (i >= n) {
                break;
            }
            int j = i;
            while (j < n && s.charAt(j) != ' ') {
                j++;
            }
            words.add(s.substring(i, j));
            i = j;
        }

        StringBuilder sb = new StringBuilder();
        for (int k = words.size() - 1; k >= 0; k--) {
            sb.append(words.get(k));
            if (k != 0) {
                sb.append(' ');
            }
        }

        return sb.toString();
    }
}
func reverseWords(s string) string {
	words := make([]string, 0)
	n := len(s)
	i := 0

	for i < n {
		for i < n && s[i] == ' ' {
			i++
		}
		if i >= n {
			break
		}
		j := i
		for j < n && s[j] != ' ' {
			j++
		}
		words = append(words, s[i:j])
		i = j
	}

	if len(words) == 0 {
		return ""
	}

	res := words[len(words)-1]
	for i := len(words) - 2; i >= 0; i-- {
		res += " " + words[i]
	}
	return res
}

相似题目

题目 难度 考察点
186. 反转字符串中的单词 II 中等 双指针
557. 反转字符串中的单词 III 简单 双指针
344. 反转字符串 简单 双指针
151. 反转字符串中的单词 中等 字符串
6. Z 字形变换 中等 模拟
本文作者:
本文链接: https://hgnulb.github.io/blog/2026/82558693
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!