如題,給出兩個字串s1和s2,其中s2為s1的子串,求出s2在s1中所有出現的位置。
為了減少騙分的情況,接下來還要輸出子串的字首陣列next。
輸入格式:
第一行為乙個字串,即為s1
第二行為乙個字串,即為s2
輸出格式:
若干行,每行包含乙個整數,表示s2在s1中出現的位置
接下來1行,包括length(s2)個整數,表示字首陣列next[i]的值。
輸入樣例#1:複製
abababc輸出樣例#1:複製aba
1時空限制:1000ms,128m30 0 1
資料規模:
設s1長度為n,s2長度為m
對於30%的資料:n<=15,m<=5
對於70%的資料:n<=10000,m<=100
對於100%的資料:n<=1000000,m<=1000000
第一次在這個oj上刷題,發現評判是真的很嚴格,定義多餘的變數竟然也會判錯。。。。。
#includeusing namespace std;
int len1,len2;
int next[1000005];
char s[1000005],t[1000005];
void next_find()
else
}}void kmp()
else
if(j==len2)
}}int main()
return 0;
}
P3375 模板 KMP字串匹配
題目描述 如題,給出兩個字串s1和s2,其中s2為s1的子串,求出s2在s1中所有出現的位置。為了減少騙分的情況,接下來還要輸出子串的字首陣列next。輸入輸出格式 輸入格式 第一行為乙個字串,即為s1 第二行為乙個字串,即為s2 輸出格式 若干行,每行包含乙個整數,表示s2在s1中出現的位置 接下...
P3375 模板 KMP字串匹配
這道題其實幾周前就已經切掉了,但是偶然間發現自己還沒發部落格,就來補一篇好了。kmp這個東西,網上講得太複雜,其實很簡單,也很容易解釋。就是分為兩部分 先維護next陣列 得先知道對next的定義吧?不知道可以上網查查 利用已經求好的next來計算。提醒一下,注意邊界判斷。不會的可以直接看我的 反正...
題解 P3375 模板 KMP字串匹配
這道題目是比較經典的 kmp 模板,用乙個模式串匹配乙個文字串,輸出全部匹配的位置 首先考慮最暴力的做法 我們從最開始的位置暴力匹配,如果成功,那麼就返回 i j i 是文字串當前的位置,j 是模式串當前的位置 否則,我們就回溯到 i j 1 因為我們開始匹配的位置是 i j 那麼它的下一位就是 i...