NO.151 翻转字符串里的单词 中等
思路一: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; 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