設有字符集a、b,現在求:
1. a
⋃ ⋃
b,即在a和b中都出現的字串,
2. a-b,即在a中出現而b中未出現的字串。
解法如下:
解放一:對a和b求hash,然後比較hash值,當hash值相等時可以直接比對字串(或者再hash後再比對字串)。由於字元長度不定,字元的組成也千變萬化,所以hash衝突的可能性很大。所以該方法比較一般。
解法二:構造26叉樹。將a和b都按字元中字母順序分別構造成26叉樹,然後求a
⋃ ⋃
b則,直接將b與a樹種進行對比,由於字元長度一般不會太長(非要有坑爹的不管),乙個字元的最大比較時間是樹的深度,由於a樹已經建立(這個時間先不算),所以比較時間就是o(len*b.length);len表示樹的最大深,b.length表示b的長度,該時間複雜度不高。是乙個不錯的解法。
求a-b,就可以構建b樹,然後拿a中字元乙個個去b中比對,如果在b中不存在那麼就是要找的乙個。
上面給出思路,以後有時間會送上**。
查詢兩個字串中相同字元
for 歷遍第乙個字串的字元,過程中用 in 檢測字元是否存在於第二個字串中。若是在則將其新增在列表中。一 函式檔案 def intersect seq1,seq2 定義交集函式,函式名及變數 res 定義空列表用來盛放相同字元 for x in seq1 歷遍字串1 if x in seq2 歷遍...
查詢兩個字串a,b中的最長公共子串
查詢兩個字串a,b中的最長公共子串。若有多個,輸出在較短串中最先出現的那個。輸入描述 輸入兩個字串 輸出描述 返回重複出現的字元 輸入例子 abcdefghijklmnop abcsafjklmnopqrstuvw輸出例子 jklmnop1.第一種解法,動態規劃,dp i j 記錄的是短字串 s1 ...
查詢兩個字串a,b中的最長公共子串。
題目描述 查詢兩個字串a,b中的最長公共子串。若有多個,輸出在較短串中最先出現的那個。首先找到a和b中最短的那個字串。這道題我覺得最巧妙的解法是利用了substr擷取a中的字串,每擷取一部分就去b中查詢,若在b中,就把最長的字串儲存起來。另外需要注意的是find函式返回的是size t型別的值,需要...