最近刚好做到了 leetcode 844 这道题,说的是两个字符串,里面如果出现# 则代表用户回退上个输入字符,最后判断下两个输出字符是否相同。 我想到的最直接的解法是 On 时间 On 空间, 对每个 char 进行判断,然后遇到#就把最后一个删掉,最后比较。 看了下 solution 里的最优解是 O1 space 的,利用了 yield 这个关键词,在遍历字符串的时候每次只返回一个 char,然后进行判断,判断完就把这个 char 删掉。的确很巧妙,但是我提交了下发现使用空间和我的 On 没什么区别。
我很好奇为什么会有这个现象,在 python3 里,yield 的优势已经不存在了吗?还是 leetcode 的空间计算有什么特性? 在写 leetcode 题时,该怎么正确降低 space 使用呢?
1
ipwx 2020-04-18 18:28:12 +08:00
所以答案连接?我看了一眼评论区,不少 O1 space 不用 yield 的呀,谁知道你 yield 怎么写的。
---- 减少 space 占用请用 C++。 |
2
ipwx 2020-04-18 18:50:55 +08:00
|
3
MainHanzo OP @ipwx 不好意思 没看到咋传图。
可是 Leetcode 里 space 的比较不应该是按语言分开的么。python 的 space performance 不可能直接和 c 语言做比价吧。 |
4
MainHanzo OP @ipwx https://leetcode.com/problems/backspace-string-compare/solution/ 是直接 solution 里的 python 解法, 用了 yiedl
|
5
ipwx 2020-04-19 21:10:56 +08:00
itertools.izip_longest 是 python 2 的函数,python 3 叫做 itertools.zip_longest 。所以你说的这个版本的答案肯定是 python 2 。(这就尴尬了
|