4988:子序列匹配
文件提交:无需freopen
内存限制:512 MB
时间限制:1.000 S
评测方式:普通裁判
金币值:
命题人:
提交:1
解决:0
题目描述
# 子序列匹配
## 题目描述
给定两个**仅由小写英文字母**组成的字符串 $S$ 和 $T$ 。
考虑将字符串 $S$ **无限次拼接**而成的**无限长字符串** $S' = SSS\cdots$ (即 $S$ **重复**无限多次)。例如,若 $S = \text{abc}$ ,则 $S' = \text{abcabcabc}\cdots$ 。
定义:字符串 $A$ 的子序列是指从 $A$ 中删除**零个或任意多个字符**后,将剩余字符按**原有相对顺序**连接而成的字符串。如:字符串 ABCDE 的子序列可以有:ABCDE、ABDE、ACE、CDE、E $\cdots$ 。但根据定义,字符串 ABCDE 的子序列**一定不可能**有 ABEDC、CAE、EDCBA。
现在要求:判断是否存在正整数 $i$ ,使得 $T$ 是 $S'$ 的前 $i$ 个字符构成的字符串的一个子序列。
如果存在这样的 $i$ ,请输出满足条件的**最小** $i$ ;如果不存在任何满足条件的 $i$ ,请输出 $-1$ 。
## 输入格式
第一行输入仅由小写字母组成的字符串 $S$ 。
第二行输入仅由小写字母组成的字符串 $T$ 。
## 输出格式
输出一个整数,表示满足条件的最小 $i$ 。如果不存在,请输出 $-1$ 。
## 样例
### 样例输入 1
```text
contest
son
```
### 样例输出 1
```text
10
```
### 样例输入 2
```text
contest
programming
```
### 样例输出 2
```text
-1
```
### 样例输入 3
```text
contest
sentence
```
### 样例输出 3
```text
33
```
## 说明/提示
样例说明 1
对于 $S=\text{contest}$ 、 $T=\text{son}$ :
- 当 $i=10$ 时, $s'$ 的前 10 个字符为 contestcon。
- 可以从中依次选取位置 3 的 s、位置 8 的 o、位置 10 的 n,构成 son。
- 当 $i=9$ 时,前缀为 contestco,无法找到足够的 n 来完成匹配。
- 因此 $10$ 是满足条件的最小值。
样例说明 2
对于 $T=\text{programming}$ ,无论将 $S=\text{contest}$ 重复多少次,其前缀中都不存在按顺序出现 p、r、o、g、r、a、m、m、i、n、g 所需的全部字母(缺少 p、g 等关键字母),故不存在满足条件的 $i$ ,输出 $-1$ 。
数据范围
| 测试点编号 | $|S|$ | $|T|$ |
|---|---|---|
| $1 \sim 2$ | $|S|=1$ | $|T|=1$ |
| $3 \sim 4$ | $|S|=2$ | $|T|=1$ |
| $5 \sim 6$ | $|S|=1$ | $|T|=2$ |
| $7 \sim 25$ | $1 \le |S| \le 10^5$ | $1 \le |T| \le 10^5$ |
对于 $100\%$ 的数据,满足 $1 \le |S| \le 10^5$ , $1 \le |T| \le 10^5$ , $S$ 和 $T$ 均仅由小写英文字母组成。( $|S|$ 表示字符串 $S$ 的长度)
---
**题目来源:** 26年3月-B组(才俊)