一開始的時候怎麼也想不明白,根本就不知道時間複雜度怎麼優化,後來在左神左學長的指點下,發現了字串的模式串是給定的,並且其無法在其本身上找到一段與其本身匹配的地方,也就是說,沒有辦法在母串上找到多個相互交錯的模式串
接下來就簡單了,分別討論母串上找到的模式串有times個的情況
當times>2時,無解了,想想就明白
當times==2時,交換找到的兩個的位置的第乙個、第二個字元,一定不會換出來模式串,想想就可以明白的
當times==1時,從第乙個開始找乙個字元與找到的模式串的位置首位相交換,再判斷即可
當times==0時,隨便交換兩個並判斷是否會再找到模式串即可
但是這個時間複雜度可能會很大,注意減少匹配的次數
**:
#include
#define ll long long
const
int maxn=
1e6+7;
using namespace std;
int l1,l2,times=0;
int nxt[maxn]
,pos[maxn]
;char str[maxn]
,st[maxn]=;
void
getnxt()
}void
kmp()}
intmain()
else
if(times==2)
else
if(times==1)
else
swap
(str[i]
,str[j]);
}}printf
("no\n");
}else
else
swap
(str[i]
,str[j]);
}}printf
("no\n");
}return0;
}
牛客18984 可愛即正義 KMP
可愛即正義 kmp二星水題 傳送門 小可愛是個可愛的女孩子 nzdl 眾所周知,小可愛在物競初賽時候有兩道大題沒有做出來,所以,可愛的小可愛 qwq 便沉浸在了毒瘤之中 無法接受在任何地方看到 suqingnianloveskirito 這個東西。然而,這時候從sd某處送來了一封安慰信 情書 信的內...
牛客字串KMP訓練題 慄醬的數列
這道題就是一道kmp模板題,但是有幾個小地方要處理下 首先我們來看看題面 傳送門 也就是說滿足 a2 b2 a1 b1 k 0 化簡之後就是 a2 a1 k b2 b1 k k 0 即 a i a i 1 k b i b i 1 k k 0 得到這個結論以後就可以用kmp的原理進行了 想清楚後就是一...
牛客 倒置字串
經過函式後變為 beijing.like i 輸入描述 每個測試輸入包含1個測試用例 i like beijing.輸入用例長度不超過100 輸出描述 依次輸出倒置之後的字串,以空格分割 1.先把字串整體倒轉 反轉前 i like beijing.反轉後1 gnijied ekil i 2.把字元傳...