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

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

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

public  ...

            sb.deleteCharAt(stack.pop());
每call 一次 deletecharAt api 貴啊... worst case O(n) 每次操作
回复

使用道具 举报

🔗
Augustus 2017-12-13 01:56:55 | 只看该作者
全局:
一个for loop, two pointers?
回复

使用道具 举报

🔗
manmankan 2017-12-22 00:06:22 | 只看该作者
全局:
感谢楼主分享 加油!
回复

使用道具 举报

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

public  ...

非常感谢你的思路!但是我想跟你讨论一下,这样的做法虽然保证了只有一次for loop,但是StringBuilder.deleteAt()每次都是O(n)的操作吧?就其实这样one pass的做法,一般情况下时间是要比two passes的长的?不知道我这样考虑对不对,如果有错误麻烦指正。谢谢啦~
回复

使用道具 举报

🔗
robustcoffee 2018-1-9 17:53:28 | 只看该作者
全局:
觉得用stack 的方法 比较clean。或者,这么写也行。

    String removeParentheses(String input, char[] p) {
        int l =0;
        StringBuilder sb = new StringBuilder();
        for (int i =0; i<input.length(); i++) {
            if (input.charAt(i) == p[0]) {
                l++;
            } else if (input.charAt(i) == p[1]) {
                l--;
            }
            if (l<0) {
                l++;
            } else {
                sb.append(input.charAt(i));
            }
        }
        if (l != 0) {
            return new StringBuilder(removeParentheses(sb.reverse().toString(), new char[]{')', '('})).reverse().toString();
        }
        return sb.toString();
    }
回复

使用道具 举报

🔗
watercup 2018-1-22 03:13:06 | 只看该作者
全局:
sparrow52 发表于 2017-12-25 07:40
非常感谢你的思路!但是我想跟你讨论一下,这样的做法虽然保证了只有一次for loop,但是StringBuilder.de ...

对于这个问题,我觉得如何返回这个valid的字符串不是考察的重点.  对于StringBuilder,deleteAt的内部使用的System.arraycopy, 这是一个native的API,通常认为这个native的方法还是挺快的。
回复

使用道具 举报

🔗
smileying 2018-1-22 05:52:16 | 只看该作者
全局:
string parath(string para){
    string res="";
    stack<char>st;
    for(int i=0;i<para.size();i++){
        if(para[i]!=')') st.push(para[i]);
        else{
            int j=i;
            while(para[j]==')') j++;
            int count=j-i;
            string tmp="";
            while(!st.empty()&&count){
                if(st.top()=='(') {
                    st.pop();
                    tmp="("+tmp;
                    count--;
                }
                else {
                    tmp=st.top()+tmp;
                    st.pop();
                }
            }
            tmp+=string(j-i-count,')');
            res+=tmp;
        }
    }
    return res;   
}
回复

使用道具 举报

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

本版积分规则

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