左神基礎課 字首樹

2021-09-13 13:51:05 字數 845 閱讀 7746

插入:得到待插入字串的長度,每次從上到下生成節點插入進去(就是相當於尾插法生成鍊錶),但如果我們要生成的節點本來就已經有了,那麼我們就直接到下面的節點裡去。 在這個步驟的迴圈中,每次都要把當前節點的pass+1,表示有乙個串要經過該節點。 到了最終的尾節點,把end+1;

優化:每次我們都判斷當前節點pass是不是只剩1了,若只剩1,那麼扣除我當前走的子串,這裡的pass就變成0了,意思是這個節點後面沒人走了,我們就可以在當前節點裡把 當前字元所對應的節點刪去,然後結束。

#include#include#includeusing namespace std;

struct node

node(char c)

unordered_mapgetmap()

};class prefixtree

void insert(string str)

//map裡有下位節點後,走向該節點

help = help->map.find(c)->second;

} //最終 end+1

help->end++;

} int search(string str)

return help->end;

} void delete_(string str)

//去下乙個節點

help = help->map.find(c)->second;

}help->end--;

} } int prefixnumber(string str)

return help->pass;

} int getheadpass()

};int main()

演算法基礎課 字首和

通常,求乙個陣列中間序列的和,可以遍歷一次,這樣的時間複雜度是o n 如果需要頻繁獲得這個和,那麼每次都要重新計算一遍。為了提高效率,可以提前計算乙個字首和陣列,每次查詢任意乙個區間的和時,用s right s left 就可以了。輸入乙個長度為n的整數序列。接下來再輸入m個詢問,每個詢問輸入一對l...

演算法基礎課 字首和與差分

對於字首和 實質上就是背公式,對於字首和分一維和二維首先應該是一維字首和的公式 s i s i 1 a i a i a i 1 常用的就是這兩個公式,對於字首和實質就是某一段區間的和。作用 求出某一段區間的和。比如說對於 l,r 這個區間,我們應該做的就是s r s l 1 即可。對於二維字首和我們...

左神基礎班 鍊錶的partition

linknode getpartition linknode head linknode go head next linknode small nullptr linknode equal nullptr linknode big nullptr 第一次遍歷,我們要找到第乙個 與最後乙個小的 和最...