給定乙個字串,字串包含數字,大小寫字母與括號,(包括大括號,中括號和小括號)括號可以巢狀,即括號裡邊可以出現數字和括號,按照如下的跪著對字串進行展開,不需要考慮括號不成對匹配的問題,用例保證括號匹配,同時保證每個數字後面都有括號,不用考慮數字後邊沒有括號的情況,即 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 在本題中,我們通過增加一些...字串展開
字串的展開
字串的展開