LeetCode 186. 反转字符串中的单词 II

题目描述

186. 反转字符串中的单词 II

思路分析

解法一:翻转两次(推荐)

核心思路

  • 先整体反转字符串。
  • 再逐个单词反转,恢复单词内部顺序。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示字符数组长度。
  • 空间复杂度:O(1),原地操作。
class Solution {
    public void reverseWords(char[] s) {
        reverse(s, 0, s.length - 1);

        int start = 0;
        for (int i = 0; i <= s.length; i++) {
            if (i == s.length || s[i] == ' ') {
                reverse(s, start, i - 1);
                start = i + 1;
            }
        }
    }

    private void reverse(char[] s, int l, int r) {
        while (l < r) {
            char tmp = s[l];
            s[l] = s[r];
            s[r] = tmp;
            l++;
            r--;
        }
    }
}
func reverseWords(s []byte) {
	reverseBytes(s, 0, len(s)-1)

	start := 0
	for i := 0; i <= len(s); i++ {
		if i == len(s) || s[i] == ' ' {
			reverseBytes(s, start, i-1)
			start = i + 1
		}
	}
}

func reverseBytes(s []byte, l int, r int) {
	for l < r {
		s[l], s[r] = s[r], s[l]
		l++
		r--
	}
}

相似题目

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