itint5 字串匹配

2022-04-11 04:02:24 字數 1064 閱讀 2538

用hash來做,目前為止做到最好也是case16超時(20w的規模),即使分桶也超時。注意計算hashcode時,'a'要算成1,否則如果'a'為0,那麼"aa"和"a"是一樣的。下面是超時的**:

#define bucket 65535

#define ulong long long

vector> uset(bucket);

vectorpow26(11);

ulong hashcode(char *str, int n)

return code;

}// 預處理初始化

void initwithstring(char *str)

ulong num = 1;

pow26[0] = 1;

for (int i = 1; i <= 10; i++)

for (int l = 1; l <= 10; l++) else

int buck = code % bucket;

uset[buck].insert(code);}}

}}// 如果query是str的字串,返回true,否則返回false

bool existsubstring(char *query) else

}

如果只存長度為10的字串到排序好的vector裡,然後用二分來做,是能過的。注意有的源字串長度就小於10了。其他的備選方法還有trie以及字尾陣列。

vectorvec;

// 預處理初始化

void initwithstring(char *str) else

}for (set::iterator it = sset.begin(); it != sset.end(); it++)

}// 如果query是str的字串,返回true,否則返回false

bool existsubstring(char *query) else if (vec[mid][i] > str[i])

}if (found) return true;

}return false;

}

201409 3 字串匹配

試題編號 201409 3 試題名稱 字串匹配 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母的大寫和小...

20140903 字串匹配

問題描述 試題編號 201409 3 試題名稱 字串匹配 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母...

201409 3 字串匹配

問題描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母的大寫和小寫看作相同的字元。輸入格式 輸入的第一行包含乙個字串s,由大小寫英文本母組成。第二行包含乙個數字,表示大小...