楼主: smiliy宝儿
跳转到指定楼层
上一主题 下一主题
收起左侧

fb phone希望印度姐姐手下留情

🔗
everest8848 2017-10-31 14:51:08 | 只看该作者
全局:
一个for loop是怎么解的?没想出来
回复

使用道具 举报

🔗
Pony_s 2017-11-1 14:10:13 | 只看该作者
全局:
这个问题很有趣,原题可以直接推导出所有可能解法,不用BFS,不用filter,O(number of solution) 。本来想写一个post但是实在太长了。

一个for loop得解。
思路,把string,分成多个section,把每个section 验证没问题再放进结果。两个buffer,一个存f final string, 一个存中间结果,一个counter用来做验证。
一般来说再最后一个section之前都是删除右括号,最后一个section删除左括号。

python:
rval = []
buf = []
counter = 0
for c in char:



洗完澡来说说,错了轻拍

补充内容 (2017-11-1 14:29):
打代码的时候不小心发布了。
一般来说括号验证是可以找到一个index,小于这个index的时候只能删除右括号,大于这个index的时候只能删除左括号。

补充内容 (2017-11-1 14:30):
找到这个index之后把字符串切分成一段段连续括号或者其他字符。然后这个问题就变成了类似取子集的问题。
回复

使用道具 举报

🔗
Pony_s 2017-11-1 14:24:20 | 只看该作者
全局:
Pony_s 发表于 2017-11-1 14:10
这个问题很有趣,原题可以直接推导出所有可能解法,不用BFS,不用filter,O(number of solution) 。本来想 ...

```
def solution(s):
    rval, buf = [], []
    counter = 0
    for c in s:
        if c == '(':
            buf.append(c)
            counter += 1
        elif c == ')':
            if counter == 0:
                if buf:
                    rval += buf
                    buf = []
            else:
                buf.append(c)
                counter -= 1
        else:
            buf.append(c)

    i = len(buf) - 1
    while i >= 0 and counter > 0:
        if buf[i] == '(':
            buf.pop(i)
            counter -= 1
        i -= 1
    rval += buf
    return "".join(rval)

print solution("aaa()((((a))(a)(((((a")
print solution("((((((((")
print solution("((())))))))")
print solution("aaaaa(aaa)(aaa)(((aaa)((a)))))))))")

```



补充内容 (2017-11-1 14:25):
随意测试了,可能还有错,代码垃圾轻拍

补充内容 (2017-11-1 15:02):
构建输出的读写不算,只有结尾多余的左括号会有两次操作,别的只有一次。

评分

参与人数 1大米 +3 收起 理由
smiliy宝儿 + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
clfhaha1234 2017-11-1 15:02:27 | 只看该作者
全局:
建一个缓存buff解决问题,遇到括号前存入缓存,遇到“(”括号就缓存入栈,遇到“)”就取出栈顶加上左右括号然后更新缓存,最后拼接在一起就好了
   
def removeInvalidParentheses(self, s):
        a = []
        cnt = 0
        buf = ""
        for c in s:
            if c!="(" and c!=")":
                buf+=c
            if c=="(":
                if cnt>=len(a):
                    a.append(buf)
                else:
                    a[cnt] = buf
                buf = ''
                cnt += 1
            if c==")":
                if cnt != 0:
                    buf = a[cnt-1] + '('+buf+')'
                    cnt -= 1
        return ''.join(a[0:cnt]) + buf

评分

参与人数 2大米 +8 收起 理由
jingjingfly + 5 给你点个赞!
smiliy宝儿 + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
kerr_J 2017-11-2 14:17:46 | 只看该作者
全局:
请问楼主出结果了嘛?还有一遍的方法有没有
回复

使用道具 举报

🔗
renewu427 2017-11-7 12:21:16 | 只看该作者
全局:
lz的题好难啊,我也是面这个组,hr跟我讲说一般2题,一个warm up的easy题,一个难点的。。。。你这个怎么一上来就这么难啊。lz, 你最后过了吗?
回复

使用道具 举报

🔗
iwantanintern 2017-11-7 12:34:01 | 只看该作者
全局:
mmymichael 发表于 2017-10-31 14:21
兄弟泥面脸书还期盼拿到ez德玛?

lol ....
回复

使用道具 举报

🔗
ninepig 2017-11-8 10:53:21 | 只看该作者
全局:
请问lz bfs是怎么做的啊 我只知道 2个for loop的
回复

使用道具 举报

🔗
watercup 2017-11-8 11:28:54 | 只看该作者
全局:
发个java的解法,只扫描一遍,用stack存储invalid括号的位置,最后把invalid的括号删除就可以了

public String removeInvalid(String input) {
        Stack<Integer> stack = new Stack<Integer>();

        for (int i = 0; i < input.length(); i++) {
            char c = input.charAt(i);
            if (c == '(') {
                stack.push(i);
            } else if (c == ')') {
                if (stack.isEmpty() || input.charAt(stack.peek()) != '(') {
                    stack.push(i);
                } else {
                    stack.pop();
                }
            }
        }

        StringBuilder sb = new StringBuilder(input);
        while (!stack.isEmpty()) {
            sb.deleteCharAt(stack.pop());
        }

        return sb.toString();
    }

评分

参与人数 2大米 +8 收起 理由
PeaceAmber + 5 给你点个赞!
zhang123587 + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
ninepig 2017-11-8 21:52:35 | 只看该作者
全局:
watercup 发表于 2017-11-8 11:28
发个java的解法,只扫描一遍,用stack存储invalid括号的位置,最后把invalid的括号删除就可以了

public  ...

6666 哥们 谢谢分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表