思路:
使用split语句以空格分割字符串,再用一个栈翻转字符
代码:
class Solution {
public String reverseWords(String s) {
Deque<String> stack=new ArrayDeque<>();
String[] strs=s.split(" ");
//这里解决了中间出现2个空格以及首尾出现空格的问题
for(String str:strs){
if(!str.equals("")){
stack.addLast(str);
}
}
StringBuilder res=new StringBuilder();
while(!stack.isEmpty()){
res.append(stack.removeLast()+" ");
}
return res.toString();
}
}
分解:
1.以下语句解决了中间出现2个空格和首尾出现空格的问题
i)注意equals和==是不一样的,这里如果用的是==,就无法判断空格了,因为比较的是引用地址是否相同
ii)equals括号里写的是""而不是" "
for(String str:strs){
if(!str.equals("")){
stack.addLast(str);
}
}
2.还可以用trim()语句将首尾的空格去掉
复杂度分析:
时间复杂度:O(N)遍历N个元素
空间复杂度:O(N) 用了栈和StringBuilder,都是O(N)的额外空间