20180323 今日算法

2018-03-23 08:13:10 +08:00
 gbin
Given an input string, reverse the string word by word.

For example,
Given s = "the sky is blue",
return "blue is sky the".

PS: 今天题目不算难,一种方法是用栈,是 O(n)的复杂度,看看各位有什么巧妙的方法吧。
4369 次点击
所在节点    算法
27 条回复
lhx2008
2018-03-23 08:15:37 +08:00
split 之后,递归到尾部,返回的时候拼接
gbin
2018-03-23 08:22:16 +08:00
@lhx2008 思路不错。
cloverii
2018-03-23 08:28:12 +08:00
我某次三面的时候被问过这题,所以这是个考栈的题么…我直接像 1L 那样说了 因为面试官说让我用 Python 写…
lhx2008
2018-03-23 08:34:15 +08:00
split 之后,头尾之间交换也可以,扫 1.5 次,空间复杂度更优
gbin
2018-03-23 08:37:10 +08:00
@cloverii 我倒觉得用递归比用栈好吧,二者空间复杂度都是 O(n),递归时间复杂度 O(n),栈 O(2n)。我看到给的提示说有更厉害的方法只需 O(1),只是没去查过,看看有没有大神提出来吧。
66450146
2018-03-23 08:41:18 +08:00
整个字符串反转,再扫一遍每个词反转即可,空间 O1
zc666
2018-03-23 08:42:10 +08:00
python 的话可以直接 split 之后数组下标从-1 开始然后下标每次递减 1,当出现 list index out of range 错误之后即是倒序遍历完了
iEverX
2018-03-23 08:57:03 +08:00
通常还会加上原地的限制,用 split,面试官一般不会满意的。当然 python 就没办法了
gbin
2018-03-23 09:00:11 +08:00
@iEverX 所以我认为#6 楼最有道理。
thebigban
2018-03-23 09:05:56 +08:00
@gbin 六楼这个有问题,如果反转,单词也被反转了。
hx1997
2018-03-23 09:06:57 +08:00
分割之后倒着拼接,或者栈,只会这俩
gbin
2018-03-23 09:07:17 +08:00
@thebigban 没有吧,先整个字符串反转再单词反转呢。
zoffy
2018-03-23 09:23:21 +08:00
js:

"the sky is blue".split(' ').reverse().join(' ')
thebigban
2018-03-23 09:37:21 +08:00
@gbin 看错了。。。
tongz
2018-03-23 09:51:37 +08:00
php:
$str = "the sky is blue";

echo implode(' ', array_reverse(explode(' ', $str)));
cloverii
2018-03-23 10:35:36 +08:00
@gbin 发现我把一楼看错了…并不知道怎么递归…重翻了一下面经,发现面试官这题问得很随意,于是我也很随意的说 split 一下再倒着输出,他没有进一步问了…(我一直觉得是因为我说用 py 写过点小爬虫,所以他问了我一个 sb 问题看我到底会不会写 py,现在突然觉得好像不是那么回事了…可能这就是我过了面试但是钱并不多的原因吧[手动狗头]
zqqian
2018-03-23 10:48:36 +08:00
lz 可以出点不这么简单的题么。。。。。
domty
2018-03-23 11:01:58 +08:00
变形的翻转字符串。
muziki
2018-03-23 11:42:30 +08:00
fn main() {
let s = "the sky is blue";
let rev_s = s.split_whitespace().rev().collect::<Vec<&str>>().join(" ");

println!("{:?}", rev_s);
}
gbin
2018-03-23 12:13:33 +08:00
@zqqian 出难一点的讨论的不多呀,你看昨天前天

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/440625

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX