亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

longestvalidparentheses方法歸納

2019-11-14 15:03:32
字體:
來源:轉載
供稿:網友

    題目大意見leetcode,下面我稍微介紹下想到的三種方法:

    方法一:不用棧去找匹配

    建立一個數組l2表示匹配,然后i從0開始,看到 ( 就把l2對應的數值記為-1,直到看到 ),找到)以后,從當前i開始返回去找是否有匹配,此時如讀到),就看當前的l2的對應位置值是否為-1,如果不是就跳轉到所對應的值的位置,繼續往前找,直到找到第一個(,將l2對應值置為此時(的下標,進行下一次操作。如果是-1,就把當前l2對應位置的值也置為-1,表示沒有多余的匹配。遍歷一遍后,得到完整的數組l2,此時需要從l2得到最大的合法匹配。舉個例子:

     對于字符串:)(())()(

     首先讀到右括號,但是此時i=0,左邊不可能有匹配,所以l2[0]=-1

     接著讀到左括號,l2[1]=-1,l2[2]=-1

     此時讀到右括號,從當前位置往前找,第一個就是左括號,所以l2[3]=2(此時左括號的下標)

     接著又讀到右括號,從當前位置往前找,先看到了右括號,此右括號的位置對應的l2值不為-1,則調到對應值-1的位置,此例子中跳到下標為1的位置,讀到一個左括號,所以l2[4]=1

     以此類推,此例中l2={-1,-1,-1,2,1,-1,5,-1}

    下面涉及到回復,我們可以看到l2中下標與值的對應就是原字符串中匹配的兩個左右括號的對應,所以,此時,我們把這個對應拿出來:3-2,4-1, 6-5。把這些值進行排序,得到1,2,3,4,5,6,可以看出要求的值,即為此排序中最大那個序列的長度(此序列以1為等差遞增)。如1,2,3,4,5,6,9,10,11,12中有兩個序列1,2,3,4,5,6和9,10,11,12.而最長的那個序列的長度即為我們所求。

    代碼如下:

    

public int longestValidParentheses(String s) {            int max=0;        int[] l2=new int[s.length()];        char[] ch=s.toCharArray();        for(int i=0;i<ch.length;i++){            if(ch[i]=='('){l2[i]=-1;}            else{                for(int j=i-1;j>=0;){                   if(ch[j]==')'&&l2[j]!=-1){                       j=l2[j]-1;                       if(j<0){l2[i]=-1;break;}                    }                    else if(ch[j]==')'&&l2[j]==-1){l2[i]=-1;break;}                    else if(ch[j]=='('){l2[i]=j;break;}                }                if(i==0&&ch[0]==')'){l2[i]=-1;}             }         }         List<Integer>l3=new ArrayList<Integer>();         for(int i=0;i<s.length();i++){             if(l2[i]!=-1){l3.add(l2[i]);l3.add(i);}         }         Collections.sort(l3);         int inter=0;         for(int i=0;i<l3.size()-1;i++){             if(l3.get(i+1)==l3.get(i)+1){inter++;max=Math.max(inter, max);}             else {max=Math.max(inter, max);inter=0;}         }         return max>0?max+1:0;       }

      程序能通過,但是跑的并不快,原因在于最后用了List,導致速度變慢了,如全用數組實現,會快一些。這個題目我用過好多辦法,發現幾乎使用List都沒過,只要一把List的方式換成數組,就能過。。。呵呵,給偷懶者當頭一棒。

      方法二:用棧去找匹配

      這種方法就簡單很多了,兩個棧,一個用來壓入左右括號,另一個壓下標??吹阶罄ㄌ柧蛪哼M去,看到右括號就進行判斷,比較簡單,直接貼代碼參考吧:

     

    public int longestValidParentheses(String s) {            int len=s.length();        int max=0;                Stack<Character> t1 = new Stack<Character>();                Stack<Integer> t2 = new Stack<Integer>();                      for(int i=0;i<len;i++){                        if(s.charAt(i)=='('){                                t1.push('(');                                t2.push(i);                        }            else{                                if(t1.size()>0 && t1.peek().equals('(')){                      t1.pop();                                       t2.pop();                                        int tmp=t2.size()==0?i+1:i-t2.peek();                                        max=Math.max(max,tmp);                                }                else{                                        t1.push(')');                                        t2.push(i);                                }                        }                }                return max;        }

       用了棧,跑的也不快。。。

       方法三:動態規劃

       動態規劃的核心在于找到最優子問題的結構和看是否有重復計算的子問題。此題中,如果一個字串是最長的合法串,那么它一定能由另一個子串構造。從字符串s有后往前,我們考慮s上的每一個位置,要是這個位置的字符包含在最長子串中,則我們可以由這個子串的從第1個元素開始的子串的最大合法子串構造。換言之,dp[i]表示從s[i]到s[s.length - 1] 包含s[i] 的最長的有效匹配括號子串長度,在s中從后往前,若s[i] == '(',則在s中從i開始到s.length - 1計算dp[i]的值。在s中尋找從i + 1開始的有效括號匹配子串長度,即dp[i + 1],跳過這段有效的括號子串,查看下一個字符,其下標為j = i + 1 + dp[i + 1]。若j沒有越界,并且s[j] == ‘)’,則s[i ... j]為有效括號匹配,dp[i] =dp[i + 1] + 2。在求得了s[i ... j]的有效匹配長度之后,若j + 1沒有越界,則dp[i]的值還要加上從j + 1開始的最長有效匹配,即dp[j + 1]。

      

    int longestValidParentheses(String s) {            int len = s.length();        if(len<2)          return 0;        int max = 0;        int []dp = new int[len];for(int i = len-2;i>=0;i--)        {          if(s.charAt(i) == '(')          {            int j = i+1+dp[i+1];            if(j<len && s.charAt(j) == ')')            {              dp[i] = dp[i+1] + 2;              if(j+1<len)                dp[i] += dp[j+1];            }            if(dp[i]>max)              max = dp[i];          }                  }        return max;    }

         這個方法的速度相比前兩種方法簡直飛起。。。

       

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人福利视频| 国产精品视频色| 欧美亚洲另类激情另类| 热久久99这里有精品| 日韩精品在线视频观看| 久久亚洲精品小早川怜子66| 欧美在线性爱视频| 欧美大荫蒂xxx| 欧美综合在线观看| 亚洲最大av网| 日韩欧美精品在线观看| 久久噜噜噜精品国产亚洲综合| 91系列在线观看| 欧美网站在线观看| 高潮白浆女日韩av免费看| 国产精品久久77777| 国产精品久久久久久久久免费| 亚洲第一福利视频| 欧美精品久久久久久久| 久久在线精品视频| 国产欧美在线视频| 日韩免费视频在线观看| 在线播放日韩av| 日韩免费av在线| 亚洲精品一区二区在线| 国产亚洲一区二区精品| 中文字幕久精品免费视频| 欧美在线一级va免费观看| 91久久国产精品| 欧美福利视频网站| 亚洲精品wwww| 亚洲国产精品久久久久秋霞蜜臀| 久久在线精品视频| 欧美日韩国产一区在线| 亚洲iv一区二区三区| 亚洲免费精彩视频| 尤物九九久久国产精品的特点| 亚洲jizzjizz日本少妇| 中文字幕日韩av综合精品| 国产精品一区二区三| 国产精品视频不卡| 国产精品久久久久久久久久尿| 韩日欧美一区二区| 亚洲国产高清福利视频| 欧美二区在线播放| 国产99在线|中文| 亚洲人成电影网站色…| 欧美久久久精品| 91在线无精精品一区二区| 欧美在线不卡区| 一区二区三区在线播放欧美| 国产成人91久久精品| 久久成年人视频| 激情懂色av一区av二区av| 久久久国产视频91| 色偷偷综合社区| 日韩av资源在线播放| 国产精品白丝jk喷水视频一区| 日韩成人在线免费观看| 欧美亚洲激情在线| 57pao国产精品一区| 久久国产精品久久久久久久久久| 欧美黄色片视频| 91精品在线观看视频| 久久久久久国产精品三级玉女聊斋| 45www国产精品网站| 在线播放亚洲激情| 欧洲成人在线观看| 久久久久久18| 日本精品久久中文字幕佐佐木| 中文字幕日韩专区| 亚洲欧美精品一区二区| 国产中文欧美精品| 日韩的一区二区| 色综合天天狠天天透天天伊人| 国产精品视频一| 精品国产91久久久久久| 在线成人一区二区| 欧美精品亚州精品| 国产亚洲欧美aaaa| 午夜免费日韩视频| 欧美日韩美女在线| 国产成人精品电影久久久| 中文字幕日韩有码| 亚洲人成电影网站色…| 久久久久久久久久久久av| 欧美激情视频在线免费观看 欧美视频免费一| 久久夜精品va视频免费观看| 欧美日韩亚洲高清| 日韩在线视频观看正片免费网站| 日韩精品免费在线视频观看| 日韩电影在线观看中文字幕| 成人美女av在线直播| 成人国产在线激情| 久久久噜噜噜久噜久久| 91亚洲精华国产精华| 欧美自拍大量在线观看| 欧美电影在线观看网站| 国产成人av在线播放| 日韩欧美亚洲综合| 久久这里只有精品视频首页| 欧美日韩激情美女| 国产极品jizzhd欧美| 亚洲成色999久久网站| 欧美激情在线视频二区| 久久99精品久久久久久琪琪| 欧美视频在线观看免费网址| 久久久久久久国产精品视频| 成人福利视频在线观看| 精品国产1区2区| 一本色道久久88综合亚洲精品ⅰ| 91精品久久久久久久久久另类| 日韩精品免费观看| 91最新国产视频| 日韩在线视频观看| 亚洲电影天堂av| 久久这里只有精品视频首页| 亚洲japanese制服美女| 亚洲娇小xxxx欧美娇小| 久久亚洲精品成人| 深夜福利91大全| 国产日韩欧美另类| 欧美诱惑福利视频| 亚洲激情在线观看视频免费| 欧美精品电影在线| 亚洲永久免费观看| 色婷婷久久av| 国产精品精品久久久久久| 日本aⅴ大伊香蕉精品视频| 夜夜躁日日躁狠狠久久88av| 伊人亚洲福利一区二区三区| 日韩欧美在线视频观看| 成人美女免费网站视频| 欧美成人免费全部观看天天性色| 亚洲福利视频专区| 欧美性猛交xxxxx水多| 国产精品6699| 91色在线视频| 国产精品99久久99久久久二8| 久久视频在线观看免费| 日韩av在线精品| 992tv在线成人免费观看| 亚洲精品免费在线视频| 国产99久久精品一区二区永久免费| 亚洲精品999| 久久久爽爽爽美女图片| 美女啪啪无遮挡免费久久网站| 日韩精品极品在线观看| 日本电影亚洲天堂| 日韩中文字幕视频在线| 日韩在线免费高清视频| 亚州成人av在线| 色婷婷综合久久久久| 国产精品扒开腿爽爽爽视频| 成人激情视频免费在线| 精品久久久久久久久国产字幕| 久久久国产视频91| 一区二区三区天堂av| 欧美激情国内偷拍| 欧美国产欧美亚洲国产日韩mv天天看完整| 久久久久久久久国产精品| 中文字幕欧美日韩精品| 久久久久中文字幕| 中文字幕日韩欧美精品在线观看|