致我們終將忘記的演算法(棧的傷)

2021-06-25 13:14:27 字數 1222 閱讀 3797

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幾歲的無奈大學四年,白駒過隙,不要等失去後才懂得珍惜 人生可沒有彩排!二十幾歲的我們,正值青春年少,風華正茂。有的人抓住機遇,成就輝煌 有的人花天酒地,紙醉金迷.命運的轉折點就在這裡,你要不好好把握,就注定了將來的平庸無能 二十出頭的大學生,面對社...