Python解决:有效子串

题目:有效子串

规则:子串全部字符都在父串中存在,且顺序与子串字符顺序一致(可以不连续)。
比如: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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值