力扣刷题笔记 → 557. 反转字符串中的单词 III

154 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

题目

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

示例

输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"

提示

在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。

解题思路

双指针

要做反转操作,双指针无疑是最佳选择,从首尾两端逐位进行两两交换,直至中间交汇处终止即可。在该题中,需要反转的是字符串中的单词,那么我们则需要先将字符串进行分隔,得到需要翻转的各个子字符串,再逐个进行翻转操作,对此,可以将翻转逻辑抽离成一个方法,便于多个子字符串复用。

class Solution {
    public String reverseWords(String s) {
        char[] c = s.toCharArray();
        int left = 0;
        
        while(left < c.length){
            int right = left;
            // 分隔子字符串
            while(right < c.length && c[right] != ' '){
                ++right;
            }
            // 对字符串区间进行翻转
            reverse(c, left, right - 1);
            // 移动至下个字符串起止点
            left = right + 1;
        }
        return new String(c);
    }

    // 翻转方法
    public void reverse(char[] c, int left, int right){
        while(left < right){
            char tmp = c[left];
            c[left++] = c[right];
            c[right--] = tmp;
        }
    }
}

 复杂度分析

  •   时间复杂度:O(N)O(N)
  •   空间复杂度:O(N)O(N)

最后

文章有写的不好的地方,请大佬们不吝赐教,错误是最能让人成长的,愿我与大佬间的距离逐渐缩短!

如果觉得文章对你有帮助,请 点赞、收藏、关注、评论 一键四连支持,你的支持就是我创作最大的动力!!!

题目出处: leetcode-cn.com/problems/re…