题目主要信息

1、把单词顺序转为正序

2、进阶:空间复杂度 img ,时间复杂度 img ,保证没有只包含空格的字符串

方法一:暴力法

具体方法

从尾到首遍历字符串,设置一个right指针记录右侧的位置,当遇到空格的时候,将空格位置到right位置的单词取出来,放入到result中

Java代码

public class Solution {
    public String ReverseSentence(String str) {
        //解法一:倒叙解决
        int length = str.length();
        int right = length;
        StringBuffer result = new StringBuffer();
        for(int i=length-1;i>=0;i--){
            if(str.charAt(i)==' '){
                //此时的空格位置单词开始位置为i+1
                result.append(str.substring(i+1,right));
                result.append(' ');//添加空格
                right = i;
            }
        }
        result.append(str.substring(0,right));//最开始的一个单词
        return result.toString();
    }
}

复杂度分析

  • 时间复杂度:O(n)O(n),只需要遍历一次字符串
  • 空间复杂度:O(n)O(n),一个临时变量

方法二:借助Split函数

具体方法

根据题意,可知单词之间是用空格间隔的,所以可以使用split(" ")来分割,然后倒叙的放入result结果中,最后输出即可。

alt

Java代码

public class Solution {
    public String ReverseSentence(String str) {
        //解法一:倒叙解决
        StringBuilder result = new StringBuilder();
        String []split = str.split(" ");
        for(int i= split.length-1;i>=0;i--){
            if(i == 0){
                result.append(split[i]);
            }else
            result.append(split[i]+" ");
        }
        return result.toString();
    }
}

复杂度分析

  • 时间复杂度:O(n)O(n),split方法的时间复杂度
  • 空间复杂度: O(n)O(n),存结果的临时变量