题目主要信息
1、把单词顺序转为正序
2、进阶:空间复杂度 ,时间复杂度 ,保证没有只包含空格的字符串
方法一:暴力法
具体方法
从尾到首遍历字符串,设置一个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();
}
}
复杂度分析
- 时间复杂度:,只需要遍历一次字符串
- 空间复杂度:,一个临时变量
方法二:借助Split函数
具体方法
根据题意,可知单词之间是用空格间隔的,所以可以使用split(" ")来分割,然后倒叙的放入result结果中,最后输出即可。
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();
}
}
复杂度分析
- 时间复杂度:,split方法的时间复杂度
- 空间复杂度: ,存结果的临时变量