代码拉取完成,页面将自动刷新
# -*- coding: utf-8 -*-
# @project : 《Atcoder》
# @Author : created by bensonrachel on 2021/7/25
# @File : (step2)F. String Game (CF).py
# https://codeforces.com/edu/course/2/lesson/6/2/practice/contest/283932/problem/F
# 题目是说:在剩下的字符串里是否还存在可以按顺序构成目标串的字符,找出对于一个字符串,最多能按给出的顺序从里面删多少个字符,
# 使其再删一个就不再存在可以按顺序构成目标串的字符
"""
Example
input
ababcba
abb
5 3 4 1 7 6 2
output
3
"""
def re(s, p):#这个函数是判断在剩下的字符串里是否还存在可以按顺序构成目标串的字符
tag = 0
for i in s:#遍历每个总串的字符
if (i == p[tag]):#遇到一个与当前目标串的对应的位置的字符相同的字符即可
tag += 1#然后滚到目标串的下一个字符
if (tag == len(p)):#看是否全部目标串的字符都有匹配,有就直接return True
return True
return False#说明没有。
def cut(s, rate, mid):#删字母的函数,删完不改变(不影响)原来的元素下标,所以要用数组来做。
l = list(s)
# print(mid)
if (mid > len(s)): mid = len(s)
for i in range(mid):
l[rate[i] - 1] = ""
return "".join(l)
def bi(s, p, rate):#找不大于的最大值的模板
x = len(s) - len(p)#
l = -1
r = x + 1#右界,要删的元素最大值肯定是两串长度之差,不然个数都不够了,怎么会还有字符可以构成目标串呢
while (l + 1 < r):
mid = (l + r) // 2
s1 = cut(s, rate, mid)
if (re(s1, p)):
l = mid
else:
r = mid
return l
if __name__ == "__main__":
str = input()
p_str = input()
rate = [int(i) for i in input().split()]
# print(cut(str,rate,3))
print(bi(str, p_str, rate))
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。