python 最长的指定瑕疵度的元音子串 算法双指针

‘’’
最长的指定瑕疵度的元音子串
开头和结尾都是元音字母(aeiouAEIOU)的字符串为元音字符串,其中混杂的非元音字母数量为其瑕疵度。比如:

“a” 、 “aa”是元音字符串,其瑕疵度都为0
“aiur”不是元音字符串(结尾不是元音字符)
“abira”是元音字符串,其瑕疵度为2

给定一个字符串,请找出指定瑕疵度的最长元音字符子串,并输出其长度,如果找不到满足条件的元音字符子串,输出0。

子串:字符串中任意个连续的字符组成的子序列称为该字符串的子串。
输入描述

首行输入是一个整数,表示预期的瑕疵度flaw,取值范围[0, 65535]。

接下来一行是一个仅由字符a-z和A-Z组成的字符串,字符串长度(0, 65535]。
输出描述

输出为一个整数,代表满足条件的元音字符子串的长度。‘’’

def zuichangdexiapiduyuanyinzichuan(m,s):
    import re
    re_s='[aeiouAEIOU]'
    fa=[]
    for i in range(len(s)):
        if re.match(re_s,s[i]):
            fa.append(i)
    x=y=0
    ans=0
    print(fa)
    while y<len(fa) and x<=y:
        if fa[y]-fa[x]+1-(y-x+1)<m:
            y+=1
        elif fa[y]-fa[x]+1-(y-x+1)>m:
            x+=1
        else:
            ans=max(ans,fa[y]-fa[x]+1)
            print(s[fa[x]:fa[y]+1])
            y+=1
    return ans

def zuichangdexiapiduyuanyinzichuan_main():
    import sys
    while 1:
        m=int(sys.stdin.readline().strip())
        s=sys.stdin.readline().strip()
        print(zuichangdexiapiduyuanyinzichuan(m,s))

zuichangdexiapiduyuanyinzichuan_main()

参考知乎链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值