A94817.完美的洗牌
普及/提高-
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
魔术师手中有两叠扑克牌,我们把它们记作牌堆 A 和牌堆 B。
牌堆 A 中包含 N 张牌,从上到下依次记录为字符串 S1。
牌堆 B 中包含 M 张牌,从上到下依次记录为字符串 S2。
现在魔术师进行一次“完美洗牌”操作:他将这就两堆牌交错地插在一起,形成了一堆新的牌(包含 N+M 张),记作 S3。
在洗牌过程中,魔术师必须遵守以下规则:
- 顺序保留:来自 S1 的牌在 S3 中的相对顺序不能改变;来自 S2 的牌在 S3 中的相对顺序也不能改变。
- 完全使用:S3 必须恰好包含 S1 和 S2 中的所有字符,不多也不少。
现在给你三个字符串 S1,S2,S3,请你判断 S3 是否能由 S1 和 S2 通过上述“洗牌”规则得到。
输入格式
输入共三行。
第一行包含一个字符串 S1。
第二行包含一个字符串 S2。
第三行包含一个字符串 S3。
输出格式
如果 S3 是由 S1 和 S2 交错组成的,输出 1;否则输出 0。
输入输出样例
输入#1
aabcc dbbca aadbbcbcac
输出#1
1
输入#2
aabcc dbbca aadbbbaccc
输出#2
0
说明/提示
样例解释与数据范围
样例 #1 解释
输出:1 (True)
S1="aabcc", S2="dbbca"
S3="aadbbcbcac"
我们可以这样拆分 S3:
- S3 的第 1, 2 位
aa来自 S1。 - S3 的第 3, 4, 5 位
dbb来自 S2。 - S3 的第 6 位
c来自 S1。 - S3 的第 7 位
b来自 S2。 - S3 的第 8 位
c来自 S1。 - S3 的第 9 位
a来自 S2。 - S3 的第 10 位
c来自 S1。
合并起来正是 S1 和 S2 的顺序交错。
样例 #2 解释
输出:0 (False)
虽然 S3 包含了 S1 和 S2 的所有字符,但在尝试匹配时会发现,无法在保持 S1 和 S2 内部顺序的前提下组成 S3。例如最后两个字符 cc 无法在不打乱顺序的情况下被放置。
数据范围
对于 100% 的数据:
- 字符串仅包含小写英文字母。
- 0≤∣S1∣,∣S2∣≤200。
- 0≤∣S3∣≤400。
数据点分布:
- 测试点 1-5:∣S1∣,∣S2∣≤5 (极小数据)
- 测试点 6-15:∣S1∣,∣S2∣≤50
- 测试点 16-25:∣S1∣,∣S2∣≤200