成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

leetcode 301. Remove Invalid Parentheses

zhisheng / 3166人閱讀

摘要:一個(gè)合法的字符串是指左括號(hào)和右括號(hào)必定成對(duì)出現(xiàn)。要求得出用最少次數(shù)的刪除可以得到的所有的合法字符串。最后兩個(gè)結(jié)果重復(fù),因此只保留,兩個(gè)結(jié)果。最終生成的合法字符串為。方法相同于上一種情況。其中出現(xiàn)了兩次。在該下標(biāo)前的刪除將會(huì)產(chǎn)生重復(fù)的結(jié)果。

題目要求
Remove the minimum number of invalid parentheses in order to make the input string valid. Return all possible results.

Note: The input string may contain letters other than the parentheses ( and ).

Examples:
"()())()" -> ["()()()", "(())()"]
"(a)())()" -> ["(a)()()", "(a())()"]
")(" -> [""]

現(xiàn)在有一個(gè)字符串包含一些左右括號(hào)以及字母。一個(gè)合法的字符串是指左括號(hào)和右括號(hào)必定成對(duì)出現(xiàn)。要求得出用最少次數(shù)的刪除可以得到的所有的合法字符串。

思路和代碼

這道題目的思路源自于評(píng)論區(qū)。剛開始會(huì)有點(diǎn)難以理解,現(xiàn)在試圖理清這個(gè)思路。

先從題目中給的例子入手:()())()
當(dāng)遍歷到第五個(gè)括號(hào)時(shí),我們發(fā)現(xiàn)這個(gè)括號(hào)的存在非法。因此我們會(huì)從當(dāng)前的三個(gè)右括號(hào)(下標(biāo)分別為1, 3, 4)中選擇一個(gè)刪去。那么選擇哪個(gè)呢?其實(shí)選擇任意一個(gè)右括號(hào)都可以使當(dāng)前的的子字符串合法,并依次生成如下三個(gè)結(jié)果(())()(),()()。最后兩個(gè)結(jié)果重復(fù),因此只保留(()),()()兩個(gè)結(jié)果。最終生成的合法字符串為[()()(), (())()]。

這里說明了一種情況,即右括號(hào)的數(shù)量多于左括號(hào)的數(shù)量。那么如何處理左括號(hào)的數(shù)量多于右括號(hào)數(shù)量的場(chǎng)景呢?如()(()
其實(shí),我們只需要將其倒置為)(()(,并且將)(視為一組合法的括號(hào)即可。這時(shí)我們會(huì)看見下標(biāo)2上的左括號(hào)不合法,對(duì)之進(jìn)行處理即可。方法相同于上一種情況。

還要考慮一個(gè)問題,即出現(xiàn)重復(fù)的結(jié)果集的問題,就像例子中重復(fù)生成的的()()。我們?nèi)绾尾拍鼙苊馐褂肧et來過濾掉重復(fù)的結(jié)果呢?

還是舉一個(gè)例子:()())())
按照之前的處理,當(dāng)我們遍歷到下標(biāo)4上的右括號(hào)時(shí),我們有三個(gè)刪除選擇。而且我們發(fā)現(xiàn)當(dāng)出現(xiàn)連續(xù)的右括號(hào)時(shí),刪除該連續(xù)括號(hào)中的任意一個(gè)產(chǎn)生的結(jié)果都相同。所以默認(rèn)情況下,我們刪除第一個(gè)括號(hào)。這時(shí)處理后的字符串為()()())以及(())())。

再對(duì)()()())處理,同樣的,當(dāng)我們遇到最后一個(gè)右括號(hào)時(shí),只需要?jiǎng)h除任意一個(gè)右括號(hào)就可以使數(shù)組成為合法數(shù)組,那么我們先根據(jù)第一個(gè)原則,刪除連續(xù)右括號(hào)的第一個(gè)括號(hào),可以產(chǎn)生沒有重復(fù)的結(jié)果為(()()),()(()),()()()。

同理(())())可以處理出結(jié)果(()()),(())()。其中(()())出現(xiàn)了兩次。我們?nèi)绾伪苊膺@樣的重復(fù)呢?這時(shí)我們需要記錄一下最后一次刪除所在的下標(biāo)。在該下標(biāo)前的刪除將會(huì)產(chǎn)生重復(fù)的結(jié)果。這里我們看到最后一次刪除的下標(biāo)為3。對(duì)下標(biāo)3之前的刪除將會(huì)帶來重復(fù)的結(jié)果(()())

public List removeInvalidParentheses(String s) {
        List result = new ArrayList();
        removeInvalidParentheses(s, result, 0, 0, new char[]{"(", ")"});
        return result;
    } 
    
    
    
    public void removeInvalidParentheses(String s, List result, int lastRemoveIndex, int lastCheckedIndex, char[] pattern){
        for(int stack = 0, i = lastCheckedIndex ; i=0) continue;
            for(int j = lastRemoveIndex ; j <= i ; j++){
                if(s.charAt(j)==pattern[1] && (j == lastRemoveIndex || s.charAt(j-1)!=pattern[1])){
                    removeInvalidParentheses(s.substring(0, j) + s.substring(j+1), result, j, i, pattern);
                }
            }
            return;
        }
        String reversed = new StringBuilder(s).reverse().toString();
        if(pattern[0] == "("){
            removeInvalidParentheses(reversed, result, 0, 0, new char[]{")", "("});
        }else{
            result.add(reversed);
        }
    }


想要了解更多開發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號(hào)!將會(huì)不定期的發(fā)放福利哦~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/68755.html

相關(guān)文章

  • 301. Remove Invalid Parenthesis

    摘要:?jiǎn)栴}解答這題是看里面的的代碼如果比大或等的話,就繼續(xù)掃下去否則,我們就找到當(dāng)前有可能刪去的,然后刪掉看新的如果只從左到右掃了,還是的時(shí)候,我們還要再?gòu)挠彝髵咭槐榉駝t兩遍都掃完了,就加入結(jié)果中去 問題:Remove the minimum number of invalid parentheses in order to make the input string valid. Ret...

    lentoo 評(píng)論0 收藏0
  • [LeetCode] 32. Longest Valid Parentheses

    Problem Given a string containing just the characters ( and ), find the length of the longest valid (well-formed) parentheses substring. Example 1: Input: (()Output: 2Explanation: The longest valid pa...

    Flink_China 評(píng)論0 收藏0
  • leetcode 部分解答索引(持續(xù)更新~)

    摘要:前言從開始寫相關(guān)的博客到現(xiàn)在也蠻多篇了。而且當(dāng)時(shí)也沒有按順序?qū)懍F(xiàn)在翻起來覺得蠻亂的。可能大家看著也非常不方便。所以在這里做個(gè)索引嘻嘻。順序整理更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新更新 前言 從開始寫leetcode相關(guān)的博客到現(xiàn)在也蠻多篇了。而且當(dāng)時(shí)也沒有按順序?qū)憽F(xiàn)在翻起來覺得蠻亂的??赡艽蠹铱粗卜浅2环奖?。所以在這里做個(gè)索引嘻嘻。 順序整理 1~50 1...

    leo108 評(píng)論0 收藏0
  • [leetcode]Longest Valid Parentheses

    摘要:在問題中,我們可以用來檢驗(yàn)括號(hào)對(duì),也可以通過來檢驗(yàn)。遇到就加一,遇到就減一。找到一對(duì)括號(hào)就在最終結(jié)果上加。我們用來表示當(dāng)前位置的最長(zhǎng)括號(hào)。括號(hào)之間的關(guān)系有兩種,包含和相離。 Longest Valid Parentheses Given a string containing just the characters ( and ), find the length of the lon...

    qujian 評(píng)論0 收藏0
  • LeetCode[22] Generate Parentheses

    摘要:復(fù)雜度思路注意的地方,要限制左括號(hào)和右括號(hào)。每出現(xiàn)一次左括號(hào),就相對(duì)于限定了,最多只能出現(xiàn)那么多右括號(hào)。所以,為了完成這種限定,用來控制。不然會(huì)有的情況出現(xiàn)。 LeetCode[22] Generate Parentheses Given n pairs of parentheses, write a function to generate all combinations of ...

    Jonathan Shieber 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<