题解:P8085 [COCI2011-2012#4] KRIPTOGRAM

读完题马上想到 kmp,但需要有一些变化。

容易发现两段单词可以匹配当且仅当它们出现的相对顺序相同,如 a a b a b cx x y x y z,因此可以想到将每个单词用它本次出现的位置与上次出现位置的差来记录它,若第一次出现则记为 inf,如 a a b a b c 可以改写成 inf 1 inf 2 2 inf

但是此时如果直接跑普通 kmp 会出现一个问题,如果文本串中这段单词中有一个在整段前出现过,而模式串中对应的单词第一次出现,就会判为不匹配,但有可能是匹配的,例如 c (a a b a b c) dx x y x y z,可以发现括号中的部分和模式串是匹配的。因此需要在 kmp 时判一下这种匹配的情况,即如果模式串中该单词第一次出现,且文本串中对应单词上次出现的位置在整段前,则也能匹配。

posted @ 2024-06-27 20:26  jxy2012  阅读(39)  评论(0)    收藏  举报
//雪花飘落效果