筆試刷題-牛客網(wǎng)2018-08-13

題目描述:

/**
一般的括號匹配問題是這樣的:
給出一個字符串祠汇,判斷這個括號匹配是不是合法的括號匹配。
如"((" 和 "())"都不是合法的括號匹配熄诡,但是"()()()"可很,"(()())()"等就是合法的括號匹配。
這個問題解決起來非常簡單粮彤,相信大家都知道怎么解決根穷。
現(xiàn)在給出一個加強版的括號匹配問題:
給出n個由括號 '(' 和 ‘)’ 組成的字符串,
請計算出這些字符串中有多少對字符串滿足si + sj是合法的括號匹配导坟。
如果si + sj和sj + si都是合法的括號匹配(i ≠ j)屿良,
那么這兩種搭配都需要計入答案;
如果對于si惫周,si + si是合法的括號匹配尘惧,那么也需要計入答案。
輸入描述:
第一行是一個整數(shù)n递递,表示字符串的個數(shù)喷橙;
接下來n行是n個非空字符串,全部由'('和')'組成登舞。
1 <= n <= 3 * 105贰逾,字符串的長度之和不超過3 * 105。
輸出描述:
一個整數(shù)菠秒,表示滿足條件的字符串對的數(shù)量疙剑。
輸入例子1:
3
()
(
)
輸出例子1:
2
輸入例子2:
5
(()
)))))
()()()
(((
))
輸出例子2:
1
*/

思路如下:

記錄leftBracketNum rightBracketNum 多余的括號數(shù)
要匹配的上才行(兩個指針的增添過程類似判斷合法性的過程)

然后用一個map記錄上來即可,兩個都多余的情況肯定不可能有人和其匹配,都為0可以左右匹配言缤,具體看代碼

代碼如下:

#include<stdio.h>
#include<iostream>
#include<string>
#include<map>
 
#define MAX_N 300000
 
typedef long long LL;
 
using namespace std;
 
string strs[MAX_N];
 
int main()
{
    int N;
    map<int, int> cntMap;
    cin>>N;
    for(int i=0; i<N; i++){
        cin>>strs[i];
        int leftBracketNum=0, rightBracketNum=0;
        for(int j=0; strs[i][j]!='\0'; j++){
            if(strs[i][j]!='(' && strs[i][j]!=')')
                return -1;
            if(strs[i][j]=='('){
                leftBracketNum++;
            }
            else if(strs[i][j]==')'){
                if(leftBracketNum>0)
                    leftBracketNum--;
                else
                    rightBracketNum++;
            }
        }
        //leftBracketNum rightBracketNum保證>=0
        if(leftBracketNum && rightBracketNum){
            continue;
        }
        //leftBracketNum rightBracketNum兩個均為0
        if(!leftBracketNum && !rightBracketNum){
            if(cntMap.find(0)==cntMap.end())
                cntMap[0]=1;
            else
                cntMap[0]++;
            continue;
        }
         //leftBracketNum rightBracketNum只有一個為0
         if(leftBracketNum){
            if(cntMap.find(leftBracketNum)==cntMap.end())
                cntMap[leftBracketNum]=1;
            else
                cntMap[leftBracketNum]++;
         }
         else if(rightBracketNum){
             //這里用負數(shù)表示
             if(cntMap.find(-rightBracketNum)==cntMap.end())
                cntMap[-rightBracketNum]=1;
             else
                cntMap[-rightBracketNum]++;
         }
    }
    LL total=0;
    for(map<int, int>::iterator it=cntMap.begin(); it!=cntMap.end(); it++){
        if(it->first<0)
            continue;
        else if(it->first==0){//計算自身就是合法的情形
            total+=((LL)(it->second)*(it->second));
            //cout<<"first=0"<<" "<<"second="<<it->second<<endl;
        }
        else{
            if(cntMap.find(-it->first)!=cntMap.end()){//計算左右可以匹配的情形
                total+=(it->second)*cntMap[-it->first];
                //cout<<"first="<<it->first<<" "<<"left_second="<<it->second<<" "<<"right_second="<<cntMap[-it->first]<<endl;
            }
        }
    }
    cout<<total<<endl;
    return 0;
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嚼蚀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子管挟,更是在濱河造成了極大的恐慌轿曙,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件僻孝,死亡現(xiàn)場離奇詭異导帝,居然都是意外死亡,警方通過查閱死者的電腦和手機皮璧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門舟扎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悴务,你說我怎么就攤上這事睹限。” “怎么了讯檐?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵羡疗,是天一觀的道長。 經(jīng)常有香客問我别洪,道長叨恨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任挖垛,我火速辦了婚禮痒钝,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘痢毒。我一直安慰自己送矩,他們只是感情好,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布哪替。 她就那樣靜靜地躺著栋荸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪凭舶。 梳的紋絲不亂的頭發(fā)上晌块,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機與錄音帅霜,去河邊找鬼匆背。 笑死,一個胖子當著我的面吹牛身冀,可吹牛的內(nèi)容都是我干的靠汁。 我是一名探鬼主播蜂大,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蝶怔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兄墅,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤踢星,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后隙咸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沐悦,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年五督,在試婚紗的時候發(fā)現(xiàn)自己被綠了藏否。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡充包,死狀恐怖副签,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情基矮,我是刑警寧澤淆储,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站家浇,受9級特大地震影響本砰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钢悲,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一点额、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧莺琳,春花似錦还棱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至咕缎,卻和暖如春珠十,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凭豪。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工焙蹭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嫂伞。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓孔厉,卻偏偏與公主長得像拯钻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子撰豺,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,097評論 1 32
  • 這幾個月來粪般,余秀華火了,她作為詩人火了污桦,當然這詩人前面還有一些可以值得一炒的定語亩歹。這就是互聯(lián)網(wǎng)時代,眾聲喧嘩之下凡橱,...
    c5de959d631b閱讀 479評論 0 6
  • 面對金錢小作,世上有四種人: 第一種人口袋里沒錢,心里也沒錢稼钩,他可以比較輕松地過一輩子顾稀; 第二種人口袋里沒錢,心里有錢...
    做不一樣的我閱讀 353評論 0 0
  • ?前幾天面試了一個實習生诡宗,主要工作是打印,整理文件击儡,外加偶爾的做做會議記錄塔沃。說直接點其實就是基本的辦公室打雜的工作...
    知己知彼KnowCareer閱讀 837評論 1 1
  • 感覺自己陷在自我懷疑自我肯定的死循環(huán)里無法自拔! 太累阳谍!
    一粒簡單閱讀 151評論 0 0