permute演算法是求序列的全排列,對於字串來說,就是將組成該字串的所有字元按各種方式排列一下。可以通過遞迴實現該演算法。
遞迴的基準情形是:當字串的長度小於等於1時,其全排列就是字串自身,直接輸出。
如果字串長度大於1,則遍歷字串中的每個字元,以該字元作為目的串的起始字元,再對源串中的其餘字元求全排列,直到字串長度為1。如下:
void permute(const std::string& s)
else
}
}但是,對於每次遍歷到的字元,它都沒有傳入下一次的遞迴,所以輸出的結果並不正確。為修改此問題,該函式需要增加乙個引數,表示本次遞迴之前已經確認的字首字元。如果本次遞迴不能結束,需要繼續遞迴下去,則繼續拼接該字首引數,傳入下一次遞迴。
void permute_i(const std::string& s, const std::string& prefix)
else
}
}這樣結果就對了。對外介面簡單:
void permute(const std::string& str, int low, int high)
void permute(const std::string& str)
一種快速的字串匹配演算法
快速字串查詢函式 目前比較流行的字串有kmp與bm演算法,實際上kmp演算法在使用的時候比strchr快不了多少,而bm演算法也 大約只有kmp演算法的3 5倍。這裡介紹乙個快速字串查詢函式。舉乙個例子 hello,world 中查詢 word 子串,可以先把兩個字串按照首位元組對好 hello,w...
一種字串搜尋方法
在閱讀開源 過程中發現一種字串搜尋方法,仔細分析之後終於搞懂其原理了。雖然不知道這種搜尋方法學術上叫什麼名字,但是對其構造跳轉表,跳躍搜尋的方式很感興趣,所以記錄下來分享一下。先看大致的 define maxchar 256 key 搜尋關鍵字 shift table 跳轉表陣列指標 void re...
一種字串搜尋方法
在閱讀開源 過程中發現一種字串搜尋方法,仔細分析之後終於搞懂其原理了。雖然不知道這種搜尋方法學術上叫什麼名字,但是對其構造跳轉表,跳躍搜尋的方式很感興趣,所以記錄下來分享一下。先看大致的 define maxchar 256 key 搜尋關鍵字 shift table 跳轉表陣列指標 void re...