1. 程式人生 > >【九度】題目1342:尋找最長合法括號序列II(25分)

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

題目地址:http://ac.jobdu.com/problem.php?pid=1342
題目描述:
假如給你一個由’(‘和’)’組成的一個隨機的括號序列,當然,這個括號序列肯定不能保證是左右括號匹配的,所以給你的任務便是去掉其中的一些括號,使得剩下的括號序列能夠左右括號匹配且長度最長,即最長的合法括號序列。
輸入:
測試資料包括多個,每個測試資料只有一行,即一個隨機的括號序列,該括號序列的長度保證不超過106。
輸出:
對於每個測試案例,輸出一個整數,表示最後剩下的最長合法括號序列長度。
樣例輸入:
(())()
(()
樣例輸出:
6
2
答疑:
解題遇到問題?分享解題心得?討論本題請訪問:http://t.jobdu.com/thread-8065-1-1.html


解題思路:
這個是校驗括號是否匹配,這個很簡單,用棧去模擬。發現是左括號就入棧,發現是右括號,而且和左括號匹配就出棧。
同時,總長度+2。掃描一遍結束就是答案。
Java AC

import java.util.Scanner;
import java.util.Stack;
 
public class Main {
    /*
     * 1342
     */
    public static void main(String[] args) throws Exception {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            String a = scanner.next();
            char array[] = a.toCharArray();
            int num = 0;
            Stack<Character> stack = new Stack<Character>();
            for (int i = 0; i < array.length; i++) {
                if (array[i] == '(') {
                    stack.push(array[i]);
                }else if (array[i] == ')' && !stack.isEmpty()){
                    stack.pop();
                    num += 2;
                }
            }
            System.out.println(num);
        }
    }
}
     
/**************************************************************
    Problem: 1342
    User: wzqwsrf
    Language: Java
    Result: Accepted
    Time:940 ms
    Memory:40184 kb
****************************************************************/

C++ AC

#include <stdio.h>
#include <stack>
#include <string>
#include <string.h>
using namespace std;
const int maxn = 1000002;
char input[maxn];
int main(){
    int n,i;
    while(scanf("%s",input) != EOF){
        n = strlen(input);
        stack<int> symStack;
        int maxLen = 0;
        for(i = 0 ; i < n; i++){
            if(input[i] == '('){
                symStack.push(i);
            }else if(input[i] == ')'  && !symStack.empty()){
                symStack.top();
                symStack.pop();
                maxLen += 2;
            }
        }
        printf("%d\n",maxLen);
    }
    return 0;
} 
/**************************************************************
    Problem: 1342
    User: wangzhenqing
    Language: C++
    Result: Accepted
    Time:40 ms
    Memory:2028 kb
****************************************************************/

相關推薦

題目1342尋找合法括號序列II(25)

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

題目1337尋找合法括號序列

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

題目1001A+B for Matrices

題目描述:     This time, you are supposed to find A+B where A and B are two matrices, and then count the number of zero rows and columns. 輸入

LeetCodeLongest Palindromic Substring && 題目1528迴文子串(騰訊2013年實習生招聘二面面試題)

         Longest Palindromic Substring          Total Accepted: 4808 Total Submissions: 23151 My Submissions         Given a string S, fi

題目1047素數判定

:1 秒記憶體限制:32 兆特殊判題:否提交:6455解決:2938題目描述: 給定一個數n,要求判斷其是否為素數(0,1,負數都是非素數)。輸入: 測試資料有多組,每組輸入一個數n。輸出: 對於每組輸入,若是素數則輸出yes,否則輸入no。樣例輸入: 13樣例輸出: ye

LeetCodeRemove Nth Node From End of List && 題目1517連結串列中倒數第k個結點

      Total Accepted: 8400 Total Submissions: 28316       Given a linked list, remove the nth node from the end of list and return its h

題目1090路徑列印 && LeetCodeSimplify Path

時間限制:1 秒記憶體限制:32 兆特殊判題:否提交:1319解決:230 題目描述: 給你一串路徑,譬如: a\b\c a\d\e b\cst d\ 你把這些路徑中蘊含的目錄結構給畫出來,子目錄直接列在父目錄下面,並比父目錄向右縮一格,就像這樣: a   b     c

題目1006ZOJ問題

題目描述: 對給定的字串(只包含'z','o','j'三種字元),判斷他是否能AC。 是否AC的規則如下: 1. zoj能AC; 2. 若字串形式為xzojx,則也能AC,其中x可以是N個'o' 或者為空; 3. 若azbjc 能AC,則azbojac也能AC,其中a,b,

題目1521二叉樹的映象

時間限制:1 秒記憶體限制:128 兆特殊判題:否提交:1026解決:265題目描述: 輸入一個二叉樹,輸出其映象。輸入: 輸入可能包含多個測試樣例,輸入以EOF結束。 對於每個測試案例,輸入的第一行為一個整數n(0<=n<=1000,n代表將要輸入的二叉樹節

尋找合法括號序列0J

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

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

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

oj 題目1001A+B for Matrices ZJU2011考研機試題1

題目1001:A+B for Matrices 時間限制:1 秒 記憶體限制:32 兆 特殊判題:否 提交:11539 解決:4694 題目描述:     This time, you are supposed to find A+B where

OJ 題目1204農夫、羊、菜和狼的故事

pla pan wol 題目 r+ ear play struct tab 思路:廣度 優先 記錄路徑長度 但是題目的意思好像是要記錄具體路徑 下次再搞吧 題目描述: 有一個農夫帶一只羊、一筐菜和一只狼過河.果沒有農夫看管,則狼要吃羊,羊要吃菜.但是船很小,只

OJ-題目1009二叉搜索樹

提交 二叉排序樹 軟件 amp cpp creat .com xheditor ear 題目1009:二叉搜索樹 從如今開始打算重新啟動刷題征程。程序猿的人生不須要解釋! 這次撇開poj hoj等難度較大的oj系統,從九度入手(已經非常長時間沒寫過代碼

OJ-題目1009二叉搜尋樹

題目1009:二叉搜尋樹         從現在開始打算重啟刷題征程。程式設計師的人生不需要解釋! 這次撇開poj hoj等難度較大的oj系統,從九度入手(已經很長時間沒寫過程式碼了),主要先“叫醒” 沉睡依舊的大腦。唉~真的很長時間沒寫部落格,沒寫程式碼了,只能加油吧!

OJ—題目1089數字反轉

題目描述:     12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,現在又任意兩個正整數,問他們兩個數反轉的和是否等於兩個數的和的反轉。 輸入:     第一行一個正整數表示測試資料的個數n。     只有n行,每行兩個正整數a和b(0<a,b<=10000)。 輸出

OJ 題目1014排名

題目描述:     今天的上機考試雖然有實時的Ranklist,但上面的排名只是根據完成的題數排序,沒有考慮每題的分值,所以並不是最後的排名。給定錄取分數線,請你寫程式找出最後通過分數線的考生,並將他們的成績按降序列印。 輸入:     測試輸入包含若干場考試的資訊。每場

2014年王道論壇計算機考研機試全真模擬考試解題報告

時間限制:1 秒記憶體限制:128 兆特殊判題:否提交:764解決:321 題目描述: 如圖,給定任意時刻,求時針和分針的夾角(劣弧所對應的角)。 輸入: 輸入包含多組測試資料,每組測試資料由一個按hh:mm表示的時刻組成。 輸出: 對於每組測試資料,輸出一個浮點數,代表

OJ題目1201二叉排序樹

紀念一下終於在二叉樹上的程式碼準確率,但還是在給root分配空間的時候忘記要寫了  悲劇 還沒看到提示要考慮忽略重複元素,這個好解決 題目描述:     輸入一系列整數,建立二叉排序數,並進行前

oj 題目120810進位制 VS 2進位制

參考了 根據參考1有 #include <cstdio> #include <cstring> #define MAXN 4000 int main(){ int to[MAXN]; int from[MAXN];