#3669. C++-残缺的字符串(性能暂不考量)

C++-残缺的字符串(性能暂不考量)

残缺的字符串

题目描述

很久很久以前,在你刚刚学习字符串匹配的时候,有两个仅包含小写字母的字符串 AA 和 BB,其中 AA 串长度为 mm,BB 串长度为 nn。可当你现在再次碰到这两个串时,这两个串已经老化了,每个串都有不同程度的残缺。

你想对这两个串重新进行匹配,其中 AA 为模板串,那么现在问题来了,请回答,对于 BB 的每一个位置 ii,从这个位置开始连续 mm 个字符形成的子串是否可能与 AA 串完全匹配?

输入格式

第一行包含两个正整数 m,nm,n,分别表示 AA 串和 BB 串的长度。

第二行为一个长度为 mm 的字符串 AA。

第三行为一个长度为 nn 的字符串 BB。

两个串均仅由小写字母和 *\texttt * 组成,其中 *\texttt * 表示相应位置已经残缺。

输出格式

第一行包含一个整数 kk,表示 BB 串中可以完全匹配 AA 串的位置个数。

若 k>0k>0,则第二行输出 kk 个正整数,从小到大依次输出每个可以匹配的开头位置(下标从 11 开始)。

输入输出样例 #1

输入 #1

3 7
a*b
aebr*ob

输出 #1

2
1 5

说明/提示

100%100\% 的数据满足 1≤m≤n≤3×1051 \le m \le n \le 3 \times 10^5。