日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Jobdu] 题目1337:寻找最长合法括号序列

發布時間:2023/12/10 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Jobdu] 题目1337:寻找最长合法括号序列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述:
給你一個長度為N的,由’(‘和’)’組成的括號序列,你能找出這個序列中最長的合法括號子序列么?合法括號序列的含義便是,在這個序列中,所有的左括號都有唯一的右括號匹配;所有的右括號都有唯一的左括號匹配。例如:((()))()()便是一個長度為10的合法括號序列,而(()))( 則不是。 需要你求解的是,找出最長的合法括號子序列的長度,同時找出具有這樣長度的序列個數。
輸入:
測試數據包括多個,每個測試數據包含兩行: 第一行為一個整數N,其中N不會超過10^6。 第二行為一個長度為N的字符串,這個字符串由左括號'('和右括號')'組成。
輸出:
對應每個測試案例,輸出一行,其中包含兩個整數,分別代表最長合法括號序列的長度和個數,中間由空格隔開。若沒有合法的子序列存在,則返回0 1。
樣例輸入:
6 (())() 3 ))(
樣例輸出:
6 1 0 1

用一個bool型的數組來標記匹配情況。

1 #include <iostream> 2 #include <stack> 3 #include <string> 4 #include <cstring> 5 using namespace std; 6 7 int n; 8 string s; 9 10 void getRes() { 11 bool a[s.length()]; 12 memset(a, false, s.length()); 13 stack<int> st; 14 for (int i = 0; i < s.length(); ++i) { 15 if (s[i] == '(') { 16 st.push(i); 17 } else { 18 if (!st.empty()) { 19 a[i] = true; 20 a[st.top()] = true; 21 st.pop(); 22 } 23 } 24 } 25 26 int max = 0, cnt = 1, tmp = 0; 27 for (int i = 0; i < s.length(); ++i) { 28 if (a[i]) { 29 ++tmp; 30 } else { 31 tmp = 0; 32 } 33 if (max == tmp && max != 0) { 34 ++cnt; 35 } else if (max < tmp) { 36 max = tmp; 37 cnt = 1; 38 } 39 } 40 cout << max << " " << cnt << endl; 41 } 42 43 int main() { 44 while (cin >> n) { 45 cin >> s; 46 getRes(); 47 } 48 return 0; 49 } 50 51 /************************************************************** 52 Problem: 1337 53 User: hupo250 54 Language: C++ 55 Result: Accepted 56 Time:310 ms 57 Memory:7604 kb 58 ****************************************************************/

?

轉載于:https://www.cnblogs.com/easonliu/p/3899543.html

總結

以上是生活随笔為你收集整理的[Jobdu] 题目1337:寻找最长合法括号序列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。