20180323 今日算法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gbin

20180323 今日算法

  •  
  •   gbin 2018 年 3 月 23 日 via Android 5011 次点击
    这是一个创建于 2954 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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)的复杂度,看看各位有什么巧妙的方法吧。
    27 条回复    2018-03-23 22:30:40 +08:00
    lhx2008
        1
    lhx2008  
       2018 年 3 月 23 日 via Android
    split 之后,递归到尾部,返回的时候拼接
    gbin
        2
    gbin  
    OP
       2018 年 3 月 23 日 via Android
    @lhx2008 思路不错。
    cloverii
        3
    cloverii  
       2018 年 3 月 23 日 via Android
    我某次三面的时候被问过这题,所以这是个考栈的题么…我直接像 1L 那样说了 因为面试官说让我用 Python 写…
    lhx2008
        4
    lhx2008  
       2018 年 3 月 23 日 via Android   1
    split 之后,头尾之间交换也可以,扫 1.5 次,空间复杂度更优
    gbin
        5
    gbin  
    OP
       2018 年 3 月 23 日 via Android
    @cloverii 我倒觉得用递归比用栈好吧,二者空间复杂度都是 O(n),递归时间复杂度 O(n),栈 O(2n)。我看到给的提示说有更厉害的方法只需 O(1),只是没去查过,看看有没有大神提出来吧。
    66450146
        6
    66450146  
       2018 年 3 月 23 日 via iPhone   6
    整个字符串反转,再扫一遍每个词反转即可,空间 O1
    zc666
        7
    zc666  
       2018 年 3 月 23 日 via iPad
    python 的话可以直接 split 之后数组下标从-1 开始然后下标每次递减 1,当出现 list index out of range 错误之后即是倒序遍历完了
    iEverX
        8
    iEverX  
       2018 年 3 月 23 日 via Android
    通常还会加上原地的限制,用 split,面试官一般不会满意的。当然 python 就没办法了
    gbin
        9
    gbin  
    OP
       2018 年 3 月 23 日 via Android
    @iEverX 所以我认为#6 楼最有道理。
    thebigban
        10
    thebigban  
       2018 年 3 月 23 日 via Android
    @gbin 六楼这个有问题,如果反转,单词也被反转了。
    hx1997
        11
    hx1997  
       2018 年 3 月 23 日 via Android
    分割之后倒着拼接,或者栈,只会这俩
    gbin
        12
    gbin  
    OP
       2018 年 3 月 23 日 via Android
    @thebigban 没有吧,先整个字符串反转再单词反转呢。
    zoffy
        13
    zoffy  
       2018 年 3 月 23 日   1
    js:

    "the sky is blue".split(' ').reverse().join(' ')
    thebigban
        14
    thebigban  
       2018 年 3 月 23 日 via Android
    @gbin 看错了。。。
    tongz
        15
    tongz  
       2018 年 3 月 23 日
    php:
    $str = "the sky is blue";

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

    println!("{:?}", rev_s);
    }
    gbin
        20
    gbin  
    OP
       2018 年 3 月 23 日 via Android
    @zqqian 出难一点的讨论的不多呀,你看昨天前天
    gbin
        21
    gbin  
    OP
       2018 年 3 月 23 日 via Android
    @gbin 可能你比较厉害觉得简单
    snw
        22
    snw  
       2018 年 3 月 23 日 via Android
    可以把题目改成字符串大于内存,但每个词小于内存
    xgzxy
        23
    xgzxy  
       2018 年 3 月 23 日
    @snw 你这个想法不错
    pagict
        24
    pagict  
       2018 年 3 月 23 日
    ```python
    ' '.join(line.split()[::-1])
    ```
    rammiah
        25
    rammiah  
       2018 年 3 月 23 日
    #24 估计是最简单的了
    WilliamLin
        26
    WilliamLin  
       2018 年 3 月 23 日 via Android
    Python 的话就用 split 加 reverse 加 join
    mrcn
        27
    mrcn  
       2018 年 3 月 23 日 via Android
    @snw 有正解吗?感觉不能做到倒着输入 /输出。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1086 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 94ms UTC 18:21 PVG 02:21 LAX 11:21 JFK 14:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86