题目:有效子串
规则:子串全部字符都在父串中存在,且顺序与子串字符顺序一致(可以不连续)。
比如:ace 是 abcde的有效子串
输入:两行字符串,第一行为子串,第二行为父串,字符串均为小写英文字母
输出:如果是有效子串,请输出子串最后一个字符在父串中的位置,如果不是有效子串,请输出-1。如果子串中有非英文字符。直接输出-1
举例:
输入:
ace
abcde
输出:
4
举例:
输入:
ad
dac
输出:
-1
解题思路
第一步:
由于需要找符合要求的子串且输出子串最后一个元素在父串中的位置,第一步先将子串反转,从串的查询来说,反转后最后一个元素的位置便在第一位了,便于查找以及后续反转后子串中第二个第三个元素
第二步:
将每次子串在父串中找到的元素的位置作以截取,由于子串在父串中的位置顺序不可变,转换后的子串中第一个找到的元素的位置必然父串中最后的一个符合要求的元素位置
第三步:
循环找到符合的子串并截取位置更新父串,计算父串长度,选择最大的父串位置的值,即所求
代码实现
target1 = input()
source = input()
target = target1[::-1]
ans = 0
for x in target:
if x.isalpha() is False:
ans = -1
break
else:
if x in source:
source = source[:source.rfind(x)]
ans = max(ans, len(source))
else:
ans = -1
break
print(ans)