nyoj 327 親和串 kmp 好題

2021-07-05 01:37:30 字數 935 閱讀 8438

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度: 3

描述 最近zyc遇到了乙個很棘手的問題:判斷親和串,以前判斷親和串的時候直接可以看出來,但現在不同了,現在給出的兩字串都非常的大,看的zyc頭都暈了。於是zyc希望大家能幫他想乙個辦法來快速判斷親和串。親和串定義:給定兩個字串s1和s2,如果能通過s1迴圈移動,使s2包含在s1中,那麼我們就說s2是s1的親和串。

輸入本題有多組測試資料,每組資料的第一行包含輸入字串s1,第二行包含輸入字串s2,s1與s2的長度均小於100000。

輸出如果s2是s1的親和串,則輸出"yes",反之,輸出"no"。每組測試的輸出佔一行。

樣例輸入

aabcd

cdaa

asdasdf

樣例輸出

yes

no

**hdu

上傳者路過這

思路:剛開始沒有看懂題意!實際上這還是讓求是否有匹配字串,但是這個題中的被匹配物件一直在發生變化,將整體往後移動,將最後乙個放到最前面,這時候,我們可以巧妙的將這個字串看成乙個環狀的字串,然後將第二個字串與這個環狀的字串進行匹配,但是如果是環狀的字串匹配我們又沒有學過,所以我們可以把它看成乙個兩個字串拼接成的乙個字串,但是由於陣列過大,拼接的話會溢位,所以,就用這個類似滾動陣列的辦法將下標進行取餘,得到的正好是對應的字元,最終遍歷所有的字元如果匹配成功輸出「yes」,否則輸出「no」!

**:#include #include char a[100005];

char b[100005];

int p[100005];

int lena,lenb;

void getp()

{ int i=0,j=-1;

p[0]=-1;

while(i

親和串(字串)

time limit 1 sec memory limit 128 mb submit 983 solved 392 submit status web board 判斷親和串。親和串的定義是這樣的 給定兩個字串s1和s2,如果能通過s1迴圈移位,使s2包含在s1中,那麼我們就說s2 是s1的親和串...

1163 親和串(字串)

1163 親和串 字串 時間限制 1 sec 記憶體限制 128 mb 提交 4897 解決 2025 狀態 討論版 提交 命題人 admin 題目描述 判斷親和串。親和串的定義是這樣的 給定兩個字串s1和s2,如果能通過s1迴圈移位,使s2包含在s1中,那麼我們就說s2 是s1的親和串。輸入本題有...

zzulioj 1163 親和串(字串)

判斷親和串。親和串的定義是這樣的 給定兩個字串s1和s2,如果能通過s1迴圈移位,使s2包含在s1中,那麼我們就說s2 是s1的親和串。本題有多組測試資料,每組資料的第一行包含輸入字串s1,第二行包含輸入字串s2,s1與s2的長度均小於100000。如果s2是s1的親和串,則輸出 yes 反之,輸出...