致我們終將忘記的演算法 隨處可見的經典 3

2021-06-25 13:07:50 字數 1088 閱讀 2776

1->求字串中重複出現的最長子串(例如:字串drgabcdeabcfh中,最長重複出現的子串為:abc)

解題方法:利用字尾樹來求解:

字串的字尾樹:(對於字串abcd來說:abcd、bcd、cd、d)那麼要求字串中出現的最長重複子串,就是找出字尾樹中的最長公共字首

int commstr(string str1,string str2)

for(int i=cur;iresult.push_back(prime[i]);

helper(n-prime[i],i,prime);

result.pop_back();

3->判斷乙個數是否是平方數

解題方法:二分法

int issqrt(int n,int low,int high)else

else }

p++;

7->字串移動(字串為*和26個字母的組合,把*移到最左側,把字母移到最右側並且保持相對位置不變)

void partitionstr(char *str)

else i--;

8->有乙個單向迴圈鍊錶,從頭開始如果到第m個就開始出隊,如此迴圈直到最後乙個元素。再把所有出隊的元素鏈結成乙個新的鍊錶。

listnode* recorder(listnode *head,int m){

listnode *p,*pre,*tail;

p=head;

listnode *newhead=new listnode(-1);     //新的鍊錶的輔助頭結點

tail=newhead;

int count=1;

while(p->next!=p){

count++;   pre=p;   p=p->next;

if(count%m==0){

pre->next=p->next;    //將p點從原表中斷開

tail->next=p;  tail=p;      //將p結點鏈結到新錶

p=pre->next;

tail->next=p;  tail=p;

tail->next=newhead->next;

return newhead->next;

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

1 棧在括號匹配中的應用,乙個字串僅包含 這三種字元,判斷這個字串中的括號是否匹配 解題方法 利用棧的先進後出的功能 bool isvalid string const s stackstk for string iterator c s.begin c s.end c else if stk.em...

致我們終將忘記的演算法(單鏈表那些事)

1 乙個單鏈表l0 l1 l2 ln 1 ln,翻轉鍊錶使其成為l0 ln l1 ln 1.不能通過改變結點的值來實現 解題方法 找到鍊錶的中間結點,斷開鍊錶,把後半部分鍊錶reverse一下,再合併兩個單鏈表。演算法的時間複雜度為o n 空間複雜度為o 1 listnode reverse lis...

致我們終將逝去的青春

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