1 Star 1 Fork 0

bensonrachel/Atcoder_algorithm

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
(step2)F. String Game (CF).py 1.87 KB
一键复制 编辑 原始数据 按行查看 历史
# -*- 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))
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/bensonrachel/atcoder_algorithm.git
git@gitee.com:bensonrachel/atcoder_algorithm.git
bensonrachel
atcoder_algorithm
Atcoder_algorithm
master

搜索帮助