以下是我看的描述最小迴圈節能讓我看懂的一篇部落格~~~
先簡單介紹一下kmp演算法利用 nxt 陣列求最小迴圈節的原理:
假設圖中的黑色是原來的字串,現在要求最小迴圈節,對於nxt[len]來說指的是圖中藍色和黃色的長度,而且藍色和黃色是相等的,
那麼綠色和紫色也是相等的,,對比原串可知紫色跟粉色是相同的子串,那麼綠色跟粉色相同,然後對比藍色跟黃色可知紅色跟粉色相同,對比原串,紅色跟棕色相同,那麼棕色跟粉色相同,不斷重複此過程可知若此字串有最小迴圈節,那麼迴圈次數一定為len/(len-nxt[len])。
結論:如果len%(len-nxt[len])=0,那麼迴圈次數為len/(len-nxt[len]),否則為1,所以最小迴圈節就等於len-nxt[len]。在我的寫法中應該是len-nxt[len-1],因為我的陣列是從0開始迴圈的。
如圖,假設黑色線來代表字串str,其長度是len,紅色線的長度代表next[len],根據next陣列定義易得字首的next[len]長度的子串和字尾next[len]長度的子串完全相同(也就是兩條線所對應的位置)。我們再求出next[len]位置處的next值,也就是圖中藍線對應的長度。同樣可以得到兩個藍線對應的子串肯定完全相同,又由於第二段藍線屬於左側紅線的字尾,所以又能得到它肯定也是整個字串的字尾。
所以要求前字尾中共同出現的子串只用求出len處的next值向下遞迴,直到為0的時候。即,next[len] , next[next[len]],…….
在做題的時候發現的乙個賊厲害的函式,這個是string型別的函式。
有兩個引數。例如:
#include
using
namespace
std;
int main()
哇,好用的一批~窒息~~~~ Pycharm中的一些技巧
作為乙個工具控,不來總結點pycharm的使用技巧怎麼行呢?1 遠端 編輯 除錯 這類使用情景就是,比如遠端機器是執行centos系統的伺服器,本地主機是安裝了pycharm的os x。要在本地寫 遠端機器上執行除錯。首先,新建乙個專案 目前還是乙個空專案 配置遠端python直譯器。並且設定ssh...
iOS中的一些除錯技巧
程式設計師每天接觸最多的就是物件 自己主動new的 和bug,而在開發中掌握一些除錯技巧是很有用的,今天工作中遇到了乙個bug搞得心好累,晚上就寫一點自己除錯中會用到的方法。所以就先講乙個和編譯器有關的除錯技巧 一.lldb除錯命令 lldb 是llvm 下的偵錯程式,xcode從4.0開始編譯器開...
編碼中的一些優化技巧
減少指令數 1.降低資料精度 小數點後面位數越多,精度越大。100.11比100.1更加精確。越是精確的資料,所用的位數越多。運算時間越長。浮點數有雙精度和單精度之分,單精度浮點數佔32bit,雙精度浮點數佔64bit,處理雙精度資料自然要比單精度資料慢。在c語言中,fabsf 是計算單精度浮點數絕...