字串展開

2021-09-18 00:19:57 字數 1470 閱讀 1130

給定乙個字串,字串包含數字,大小寫字母與括號,(包括大括號,中括號和小括號)括號可以巢狀,即括號裡邊可以出現數字和括號,按照如下的跪著對字串進行展開,不需要考慮括號不成對匹配的問題,用例保證括號匹配,同時保證每個數字後面都有括號,不用考慮數字後邊沒有括號的情況,即  2a2(b)這種情況不用考慮。

1)數字表示括號裡的字串重複的次數,展開後的字串不包括括號。

2)字串展開是逆序展開

輸入描述:

輸入乙個長度小於100的字串

輸出描述:

輸出展開後的字串

示例1:輸入輸出示例僅供除錯,後台判斷資料一般不包含示例

輸入    abc3(a)

輸出   aaacba

解析:  個人覺得題目中有些地方沒解釋清楚,如果再增加乙個示例就好了,比如如果出現了括號巢狀的情況,首層括號要重複的內容是否要包含巢狀括號的內容,還有就是是否要包括首層括號裡邊的數字,還有就是括號裡邊的內容是否要顛倒過來

個人理解的是,巢狀時候,首層括號重複時包含裡邊括號的內容,不含數字(即重複首層括號裡除括號數字外所有字元),且括號內輸出不倒序

解題思路:設計兩個佇列,正著查輸入字串,記錄每個出現( ]的位置,加入佇列,

這樣保證 出佇列的時候都是對應配對括號的位置,如果最後乙個括號)} ] 後還有字串,倒過來放到輸出最前

如果第乙個括號 ( [

}return result;

}bool isleft(char ch)

else return false;

}bool isright(char ch)')

else return false;

}int main()

for(int i=inend;i>0;i--) in the queue from right to left

if(isright(instr[i]))  iter_end.push(i);

}int num = iter_beg.size();     //count all the brace in the string

string outstr = "";    //store the output string

string outendstr = "";  //store the last part of the out string

if(num ==0)

for(int i=1;i<=num;i++)

if(beg !=1)

}int repeat = instr[beg-1]-'0'; //record the repeat times of a string in brace

temp = filter(instr.substr(beg+1,end-beg-1));

for(int j=0;jiter_beg.pop();

iter_end.pop();

}outstr += outendstr;

cout<

字串展開

在初賽普及組的 閱讀程式寫結果 的問題中,我們曾給出乙個字串展開的例子 如果在輸入的字串中,含有類似於 d h 或 4 8 的子串,我們就把它當作一種簡寫,輸出時,用連續遞增的字母或數字串替代其中的減號,即,將上面兩個子串分別輸出為 defgh 和 45678 在本題中,我們通過增加一些引數的設定,...

字串的展開

在初賽普及組的 閱讀程式寫結果 的問題中,我們曾給出乙個字串展開的例子 如果在輸入的字串中,含有類似於 d h 或 4 8 的子串,我們就把它當作一種簡寫,輸出時,用連續遞增的字母或數字串替代其中的減號,即,將上面兩個子串分別輸出為 defgh 和 45678 在本題中,我們通過增加一些引數的設定,...

字串的展開

題目描述 在初賽普及組的 閱讀程式寫結果 的問題中,我們曾給出乙個字串展開的例子 如果在輸入的字串中,含有類似於 d h 或者 4 8 的字串,我們就把它當作一種簡寫,輸出時,用連續遞增的字母或數字串替代其中的減號,即,將上面兩個子串分別輸出為 defgh 和 45678 在本題中,我們通過增加一些...