蓝桥杯真题--最长子序列 and 2023
1.2019蓝桥杯--最长子序列
这道题代码很简单,但要注意其中的细节字眼,不要理解错题
- T中字符串的每一个并不是在S中存在就可以,而需要按照一定顺序依次对应
- 必须从第一个字符开始判断,即使后面有更长的,被隔断了则不需要进行判断
代码一:
s=str(input())
t=str(input())
i,j=0,0
while i<len(s) and j<len(t):
if s[i]==t[j]:
j+=1
i+=1
print(j)
代码二:
s=str(input())
t=str(input())
res=0
for i in range(len(s)):
if s[i]==t[res]:
res+=1
print(res)
这两种代码是完全等价的,看自己喜欢用哪种循环
2.2023蓝桥杯--2023
这道题是一道填空题,我们可以忽略其超时问题,只要能跑出结果即可
对比上一道最长子序列问题,我们可以发现这两道题有相同之处,都可看作从一个字符串中按照顺序,寻找另一个序列
a=['2', '0', '2', '3']
def f(n):
i,j=0,0
key=True
while i<len(n) and j<len(a):
if n[i]==a[j]:
j+=1
i+=1
if j==4:
key=False
# 当j为4的时候,说明可以对应找到2023,即完全包含
break
return key
# 自定义一个函数,若完全不包含2023则返回True
ans=0
for x in range(12345678,98765433):
n=list(str(x))
if f(n):
ans+=1
print(ans)
# 最后结果为85959030
print(85959030)