[英]Algorithm to find the union of multiple strings grouped by character index
我一直在嘗試一種高效的方法,該方法可以在按索引分組的一組fixed width
字符串中查找字符出現的並集。 像這樣的東西;
s1 = "013965"
s2 = "015935"
s3 = "310012"
結果如下所示,所有數字組都存在於char索引n處的所有字符串中:
out = "[03][1][350][90][631][52]"
我曾想過這樣做的天真的方法:遍歷每個字符串,每個索引,同時將中間字符串存儲在數組中,然后遍歷該數組以構建輸出值。 但是,在我看來,我的方法是一種效率極低的方法,與漸近最優解相距太遠。
如果預先知道所有可能字符的集合,則假設它們的數目為n
,並且n
不太高(例如10,如果您僅執行數字操作),則可以通過創建m
長度為n
布爾數組來做到這一點,其中m
是位置數或輸入字符串中的位數, n
。 如果任何輸入字符串中的第n個字符位於第m個位置,則第m個數組中的第n個位置將為true
。 False
將表示以前沒有這樣的字符在第m位。
然后,您可以遍歷每個字符串,當在位置m
遇到字符n
,將在第m個數組的第n個位置標記為true
。 最后,您將擁有m
數組,每個數組描述第m個組的內容
pos[0] = {true, true, false, false, false, true, true, false, true, false}
pos[1] = {true, false, false, false, false, false, false, false, false, false}
pos[2] = {false, false, true, true, false, false, false, false, false, true}
轉換為
[0,1,5,6,8] [0] [2,3,9]
由於所有結構都是直接訪問數組,因此不涉及查找,所有訪問都在固定時間內進行,您只需要訪問每個字符一次,而無需進行比較。 希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.