題目描述
定義如下規則序列(字串):
1.空序列是規則序列;
2.如果s是規則序列,那麼(s)和[s]也是規則序列;
3.如果a和b都是規則序列,那麼ab也是規則序列。
例如,下面的字串都是規則序列:
而以下幾個則不是:
現在,給你一些由『(』,『)』,『[』,『]』構成的序列,你要做的,是補全該括號序列,即掃瞄一遍原序列,對每乙個右括號,找到在它左邊最靠近它的左括號匹配,如果沒有就放棄。在以這種方式把原序列匹配完成後,把剩下的未匹配的括號補全。
輸入格式
輸入檔案僅一行,全部由『(』,『)』,『[』,『]』組成,沒有其他字元,長度不超過100。
輸出格式
輸出檔案也僅有一行,全部由『(』,『)』,『[』,『]』組成,沒有其他字元,把你補全後的規則序列輸出即可。
輸入輸出樣例
輸入 #1
輸出 #1()
說明/提示
將前兩個左括號補全即可。
#include
#include
#include
using
namespace std;
const
int maxn =
1e5+10;
int vis[maxn]
;int id[maxn]
;char st[maxn]
;int top;
intmain()
else
if(str[i]
==')')}
else
if(str[i]
==']')}
}for
(int i =
0; i < str.
size()
; i++)}
return0;
}
資料結構1 1 線性表 P1241 括號序列
如果理解題目意思,本題非常簡單。但是題目表述問題很嚴重幾乎看不懂,本人理解大致如下 第一遍掃瞄,對於右括號 和 尋找左側第乙個沒有匹配成功的左括號 和 記錄是否成功匹配,然後結束匹配。最後掃瞄一遍序列,若該字元成功匹配則直接輸出,若沒有成功匹配則新增配對再輸出。include using names...
LG1241 括號序列
lg1241 乙個朋友問的這個題,讓我幫忙debug一下,沒想到被語文勸退了 這個題目麻煩就麻煩在理解題意上,在這裡重新複述一下 題中所謂的 這種方式 的意思說的不是很明白,具體是 對於每乙個右括號都要向左去找最近的乙個沒有被標記的對應的左括號,看看二者之間是否有未被標記的左括號隔開,如果沒有則匹配...
括號匹配問題(棧模擬)
在某個字串 長度不超過100 中有左括號 右括號和大小寫字母 規定 與常見的算數式子一樣 任何乙個左括號都從內到外與在它右邊且距離最近的右括號匹配。寫乙個程式,找到無法匹配的左括號和右括號,輸出原來字串,並在下一行標出不能匹配的括號。不能匹配的左括號用 標註,不能匹配的右括號用 標註.輸入包括多組資...