长大后想做什么?做回小孩!

0%

LeetCode——翻转字符串中的单词

NO.151 翻转字符串里的单词 中等

GoQ5z4.png

思路一:API 第一感觉直接API,按空格分割一下,然后重新生成字符串。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public String reverseWords(String s) {
if (s==null)return s;
//分割s
String[] strs = s.split(" ");
StringBuilder sb=new StringBuilder();
//逆序遍历
for (int i = strs.length-1; i >= 0; i--) {
//跳过空串
if (strs[i].equals(""))continue;
sb.append(strs[i]).append(" ");
}
//去除最后一个多余的空格
return sb.toString().trim();
}

时间复杂度:O(n)

空间复杂度:O(n)

思路二:栈 第二感觉就是用栈,因为题目意思是翻转单词的顺序,就想到了先进后出。先将单词全部入栈,然后全部出栈得到结果。又觉得本质上和直接用API没啥区别。。班门弄斧了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public String reverseWords(String s) {
if (s==null)return s;
Stack<String> stack=new Stack<>();
//将单词都入栈
StringBuilder sb=new StringBuilder();
for (char c : s.toCharArray()) {
if (c != ' ') {
sb.append(c);
}else {
stack.push(sb.toString());
sb=new StringBuilder();
}
}
stack.push(sb.toString());
//都出栈
StringBuilder ans=new StringBuilder();
while (!stack.isEmpty()) {
//空串跳过
if (!stack.peek().equals(""))ans.append(stack.peek()).append(' ');
stack.pop();
}
return ans.toString().trim();
}

时间复杂度:O(n)

空间复杂度:O(n)


本人菜鸟,有错误请告知,感激不尽!

更多题解和源码:github