字串查詢(相關)

2021-05-02 10:00:06 字數 783 閱讀 5989

題目如下:

假設一字串已被預處理,其中出現過的每一字元其出現的位置已被存到已排序列表(sorted list)中,例如

a = "this is a text"

預處理後會得到一下列表:

a : 9

e : 12, 17

h : 2

i : 3, 6

s : 4, 7, 13

t : 1, 11, 14, 16, 19

x : 18

空格 : 5, 8, 10, 15

對任意給定字串b,請設計一演算法找出字串a中b出現的所有位置,演算法複雜度多少?

自己感覺可能利用hash表才能有效降低複雜度,誰有巧妙地、好的演算法,**貼過來更好了!(c、c++均可)

解答:這個明顯和預處理結果的儲存結構栖栖相關

(1)對於字母不區分大小寫

如果設計預處理是乙個 [0-26) 的陣列鍊錶  list *pre_post['z'-'a'];

那麼直接使用0和1位置(a, b字母資訊)的鍊錶進行遍歷,即可得到結果

演算法複雜度跟a,b出現的次數成線性關係,即複雜度為o(n)

(2)區分大小寫

設計同上, 乙個 [0-52) 的陣列鍊錶即可

具體的預處理儲存直接影響演算法複雜度

字串相關

30 字串相關 30.1追加字元 nsmutablestring string nsmutablestring alloc init nsstring stroneintro info stringbyreplacingoccurrencesofstring withstring 30.3字串比較 ...

字串相關

字串轉換相關部落格 使用stringstream字串轉數字 include include includeusing namespace std int main 使用sscanf 進行字串轉數字char str 1234321 int a sscanf str,d a char str 123.3...

字串查詢

問題描述 對於乙個給定的 source 字串和乙個 target 字串,你應該在 source 字串中找出 target 字串出現的第乙個位置 從0開始 如果不存在,則返回 1。解決思路 採用雙重for迴圈解決,思路清晰,較容易寫,但效率不高,另外一種方法是用kmp演算法,效率較高。需注意邊界條件,...