算法修炼之路—【字符串】Leetcode 557 反转字符串中的单词 II

题目描述

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

示例1:

输入: s= “Let’s take Leetcode contest”
输出: “s’teL ekat edocteeL tsetnoc”

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

思路分析

难度是简单 ,我们需要对输入字符串进行至少一次的遍历,来完成一下功能:

  1. 根据空字符来分片,每一片为一个单词;
  2. 将每个单词取反,单词相对位置不变,返回新的字符串;

这里我们通过String.split()方法来实现步骤1 空字符分词;单个取反采用下标遍历,这里直接给出代码有:

解题代码

    public static String solution(String s) {
        if (s == null || s.length() < 2) {
            return s;
        }

        StringBuilder res = new StringBuilder();
        
        for(String str : s.split(" ")){
            int i = str.length() - 1;
            while(i >= 0)
                res.append(str.charAt(i--));
            
            res.append(' ');
        }
        
        return res.toString().trim();
    }

复杂度分析

这里我们设n为输入字符串的长度;

时间复杂度: 我们对字符串进行了一次遍历,故时间复杂度为O(n);
空间复杂度: 借助辅助容器 res ,故空间复杂度为O(n);

Github源码

完整可运行文件请访问GitHub

猜你喜欢

转载自blog.csdn.net/u011106767/article/details/106091737
今日推荐