1. 程式人生 > >尋找最長的合法括號序列

尋找最長的合法括號序列

問題:假如給你一個由’(‘和’)’組成的一個隨機的括號序列,當然,這個括號序列肯定不能保證是左右括號匹配的,所以給你的任務便是去掉其中的一些括號,使得剩下的括號序列能夠左右括號匹配且長度最長,即最長的合法括號序列。


輸入:測試資料包括多個,每個測試資料只有一行,即一個隨機的括號序列,該括號序列的長度保證不超過10的6次方。

輸出:對於每個測試案例,輸出一個整數,表示最後剩下的最長合法括號序列長度。

樣例輸入:
(())()
(()

樣例輸出:
6
2

實現程式碼:


#include <iostream>
#include <stack>
#include <string>
#include <string.h>

using namespace std;

int main(int argc,char **argv){
string line;
int i,cnt=0;
stack<char> s;
for(;cin>>line;){
char *cs=new char[line.size()+1];
memset(cs,0,line.size()+1);
memcpy(cs,line.c_str(),line.size());
s.push(cs[0]);
for(cnt=0,i=1;i<line.size();++i){
if(cs[i]==')'&&!s.empty()&&s.top()=='(') {
cnt+=2;
s.pop();
}else s.push(cs[i]);
}
cout<<cnt<<endl;
delete cs;
for(;!s.empty();) s.pop();
}
return 0;
}




執行結果:

[img]http://dl.iteye.com/upload/attachment/0063/8114/674ad4b0-906d-3b37-947c-cb8c3319d4a7.jpg[/img]

[img]http://dl.iteye.com/upload/attachment/0063/8116/94777d2a-9943-3b68-8fc7-5b3a3134751a.jpg[/img]

相關推薦

【九度】題目1342:尋找合法括號序列II(25分)

題目地址:http://ac.jobdu.com/problem.php?pid=1342 題目描述: 假如給你一個由’(‘和’)’組成的一個隨機的括號序列,當然,這個括號序列肯定不能保證是左右括號匹配的,所以給你的任務便是去掉其中的一些括號,使得剩下的括號序列能夠左右括號

尋找合法括號序列九度0J

#include<stdlib.h> #include<stdio.h> #include<string.h>  main() {char str[1024] = {0};int  left = 0, right = 0, count =

九度 題目1337:尋找合法括號序列

題目描述: 給你一個長度為N的,由’(‘和’)’組成的括號序列,你能找出這個序列中最長的合法括號子序列麼?合法括號序列的含義便是,在這個序列中,所有的左括號都有唯一的右括號匹配;所有的右括號都有唯一的左括號匹配。例如:((()))()()便是一個長度為10的合法括號序列,而

合法括號序列:棧(括號題)

題目描述 這是另一道處理合法括號序列的題目。 我們應該提醒你,如果一個括號序列插入“+”和“1”後,可以得到一個正 確的數學表示式,那麼它被稱為“合法”的。 例如,序列“(())()”,“()”和“(()(()))”是合法的,但“)(”,“(()”和“(()))

合法括號

Longest Valid Parentheses 最長合法括號 一、問題描述 給一個只由’(‘和’)'組成的字串,找出其中最長的連續合法子串長度。(來源Leetcode) 樣例 Input:(() Output:2 Input: )()()) Output: 4 Inp

動態規劃--尋找遞減子序列

昨天C++課上留了三道題,除了C語言本身外都涉及了一些演算法。其中第二個問題是這樣的: 攔截導彈 某國為了防禦敵國的導彈襲擊,開發出一種導彈攔截系統。但是這種導彈攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達

LeetCode 32 Hard 合法括號對 Python

def longestValidParentheses(self, s): """ Solution Method 演算法:動規 思路: 我一開始想的是和最長迴文子串一樣,用一個二維陣列dp[i][j]來記錄到s[i:j+1]部分是不是vali

尋找合法括號序列

問題:假如給你一個由’(‘和’)’組成的一個隨機的括號序列,當然,這個括號序列肯定不能保證是左右括號匹配的,所以給你的任務便是去掉其中的一些括號,使得剩下的括號序列能夠左右括號匹配且長度最長,即最長的合法括號序列。輸入:測試資料包括多個,每個測試資料只有一行,即一個隨機的括號

51nod 1478 括號序列合法子段(棧-括號匹配尋找合法子串長度及其個數)

這裡有另一個關於處理合法的括號序列的問題。如果插入“+”和“1”到一個括號序列,我們能得到一個正確的數學表示式,我們就認為這個括號序列是合法的。例如,序列"(())()", "()"和"(()(()))

Longest Palindromic Substring(動態規劃之尋找迴文子序列

求一個字串中符合迴文性質的最長子序列Example:Input: "babad" Output: "bab" Note: "aba" is also a valid answer. Example:Input: "cbbd" Output: "bb"演算法思路:一開始的

公共子序列LCS (DP)

mem main amp code bcd max std pan ems 題意: 求兩個字符串的公共子序列,如“abcd” 與 “becd”的公共子序列是 “bcd” 分析: 設兩個字符串為 串s 和串tdp[i][j]:= s1..si和t1...tj對應的LCS長度

【HackerRank】Common Child (LCS)公共子序列

lin ring def imp sep content hat jin ted Given two strings a and b of equal length, what’s the longest string (S) that can be construct

【DP】公共子序列

amp 給定 scrip ros script print 最長 去掉 != Description   字符序列的子序列是指從給定字符序列中隨意地(不一定連續)去掉若幹個字符(可能一個也不去掉)後所形成的字符序列。令給定的字符序列X=“x0,x1,…,xm-1”,序列Y

leetcode遞增子序列問題

wan details img mat 最後一個元素 例如 公式 back 一個 題目描寫敘述: 給定一個數組,刪除最少的元素,保證剩下的元素是遞增有序的。 分析: 題目的意思是刪除最少的元素。保證剩下的元素是遞增有序的,事實上換一種方式想,就是尋找最長的遞增有序序列。

公共子序列(LCS)

公共子序列 一個 clas style == ++ 字符串 tro 我們 最長公共子序列: LIS是一個典型的用動規解決的問題。 給出兩個字符串,求出兩串的最長公共子序列的長度。 我們可以構造出他的結構特征。f(i,j)表示str1[1]~str1[i]和str2[1]~s

公共子序列

pac str 描述 pid scan div gre max ems 1619: P1050 時間限制: 1 Sec 內存限制: 128 MB提交: 38 解決: 28[提交][狀態][討論版] 題目描述 一個字符串A的子串被定義成從A中順次選出若幹個字符構成的串

[C++] 動態規劃之矩陣連乘、公共子序列大子段和、單調遞增子序列

每次 種子 () return 避免 amp 可能 text com 一、動態規劃的基本思想   動態規劃算法通常用於求解具有某種最優性質的問題。在這類問題中,可能會有許多可行解。每一個解都對應於一個值,我們希望找到具有最優值的解。   將待求解問題分解成若幹個子問題,先求

[LeetCode] Longest Harmonious Subsequence 和諧子序列

wiki ray note maximum mon ren enc imu max We define a harmonious array is an array where the difference between its maximum value and

[網絡流24題]遞增子序列問題 大流

size 個數 clu 編程 input num pac ros ini Description 給定正整數序列x1 ,... , xn 。 (1)計算其最長遞增子序列的長度s。(嚴格遞增) (2)計算從給定的序列中最多可取出多少個長度為s的遞增子序列。 (3)如果允

動態規劃 公共子序列

一個 then mda 偽代碼 n-2 msu csdn static 證明 最長公共子序列(LCS)問題 下面通過一個具體的例子來學習動態規劃方法 —— 最長公共子序列問題。 最長公共子串(Longest Common Substring)與最