Hlg 1665 【KMP】.cpp
题意:
给出一个文本串str
给出n个模板串arr
问有多少个模板串可以由文本串中的两段子串组成,且两段子串在文本串中的先后顺序不变。
思路:
用两次KMP求出每个子串从第一个字符开始的第一个出现位置和从最后一个字符开始的第一个出现位置
即next[0][i]表示模板串中以i结尾的子串在文本串中第一次出现的位置,next[1][i]表示模板串中以i开始到最后的子串在文本串中最后一次出现的位置
然后看一下是否有next[0][i]<next[1][i+1]的情况存在..
如果有代表这个模板串可以在文本串中找到符合要求的情况。
Tips:
①. 用另外一个字符串来记录翻转的串的时候,要在最后加上一个'\0'
②. 用指针传数组的时候,memset(..)不能用,只能for来初始化。
Code:
View Code
链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1665