1->棧在括號匹配中的應用,乙個字串僅包含"(",")","["."]",""這三種字元,判斷這個字串中的括號是否匹配
解題方法:利用棧的先進後出的功能
bool isvalid(string const& s)";
stackstk;
for(string::iterator c=s.begin();c!=s.end();c++)else{
if(stk.empty()||stk.top()!=leftstr[rightstr.find(*c)]) return false;
else stk.pop();
return stk.empty();
2->求乙個只包含「)」和「(」字元的最大匹配長度。例如:「(()」最大匹配為「()」返回長度為2
int longestvalidparentheses(string s){
int max_len=0,last=-1; //最後乙個『)』的位置
stacklefts;
for(int i=0;iif(s[i]=='(') lefts.push(i);
else{
if(lefts.empty()) last=i;
else{
lefts.pop();
if(left.empty()){
max_len=max(max_len,i-last);
else
max_len(max_len,i-lefts.top());
return max_len;
3->求後續表示式的值。例如:["2","1","+","3","*"]返回(2+1)*3=9
int evalrpn(vector& tokens){
stacks;
for(int i=0;iif(!is_operator(tokens[i])) s.push(tokens[i]);
else{
int y=stoi(s.top()); s.pop();
int x=stoi(s.top()); s.pop();
if(tokens[i]=='+') x+=y;
else if(tokens[i]=='-') x-=y;
else if(tokens[i]==『*') x*=y;
else x/=y;
s,push(to_string(x));
return stoi(s.top());
致我們終將忘記的演算法(單鏈表那些事)
1 乙個單鏈表l0 l1 l2 ln 1 ln,翻轉鍊錶使其成為l0 ln l1 ln 1.不能通過改變結點的值來實現 解題方法 找到鍊錶的中間結點,斷開鍊錶,把後半部分鍊錶reverse一下,再合併兩個單鏈表。演算法的時間複雜度為o n 空間複雜度為o 1 listnode reverse lis...
致我們終將忘記的演算法 隨處可見的經典 3
1 求字串中重複出現的最長子串 例如 字串drgabcdeabcfh中,最長重複出現的子串為 abc 解題方法 利用字尾樹來求解 字串的字尾樹 對於字串abcd來說 abcd bcd cd d 那麼要求字串中出現的最長重複子串,就是找出字尾樹中的最長公共字首 int commstr string s...
致我們終將逝去的青春
20幾歲的無知等於30幾歲的迷茫40幾歲的彷徨和50幾歲的無奈大學四年,白駒過隙,不要等失去後才懂得珍惜 人生可沒有彩排!二十幾歲的我們,正值青春年少,風華正茂。有的人抓住機遇,成就輝煌 有的人花天酒地,紙醉金迷.命運的轉折點就在這裡,你要不好好把握,就注定了將來的平庸無能 二十出頭的大學生,面對社...