什麼是在字符串上實現查找/替換算法的簡單方法?我想使用定義替換規則的字典來轉換字符串。問題是,每次更換後,我都必須確保後續替換操作在原始字符串上。例如:用於替換字符串中的匹配模式的算法
我的字符串是:ABCABCDEFDEF
我的規則是:ABC - > DEF與DEF - > XXX
所以我的結果應該是:DEFDEFXXXXXX 而不是XXXXXXXXXXXX(這將是結果如果我首先應用規則一,然後應用規則二)。
什麼是在字符串上實現查找/替換算法的簡單方法?我想使用定義替換規則的字典來轉換字符串。問題是,每次更換後,我都必須確保後續替換操作在原始字符串上。例如:用於替換字符串中的匹配模式的算法
我的字符串是:ABCABCDEFDEF
我的規則是:ABC - > DEF與DEF - > XXX
所以我的結果應該是:DEFDEFXXXXXX 而不是XXXXXXXXXXXX(這將是結果如果我首先應用規則一,然後應用規則二)。
簡單的方法:
在第一個字符開始,嘗試每一個關鍵,如果它發生在那個位置。
如果你找到一個匹配,更換,並以字符繼續更換後
否則,繼續下一個字符
要記住KEP:
歧義:如果您同時擁有「AB」和「ABC」作爲鍵,您需要決定哪些符合「ABCD」。通常你希望更長的字符串匹配(否則,它永遠不會匹配)
Unicode:首先標準化鍵和原始字符串。
這對於少數幾個鍵肯定是足夠的。但是,它是O(N * M),其中N是字符串長度,M是替換的數量。
改進:
沒有爲比賽線性搜索;而是使用排序的鍵列表對原始字符串中的字符進行二分搜索,然後進行下一個等等。事實上,只記住第一遍中找到的匹配的位置和鍵可能是有益的,並且執行替換在第二遍
與許多替代品的大字符串,它通常是更好地建設一個新的字符串
使用Aho-Corasick搜索。這利用了有限的搜索空間(即,e知識來源於關鍵字列表)以避免探測源字符串的每個字符
對於每個規則,找到與其匹配的索引。然後應用規則? (我認爲必須有一些更快的方式) – Jae
那麼,在我申請的每條規則之後,我的指數會發生變化,不是嗎? – Simeon
遍歷整個字符串一次,並在列表或類似數據結構中記錄所需子字符串的出現次數。然後遍歷列表並繼續替換! – user2963623