字母异位词的子串

题目描述:

给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。(find-all-anagrams-in-a-string)

示例:

输入:s: "cbaebabacd" p: "abc"
输出:[0, 6]

解释:
	起始索引等于 0 的子串是 "cba", 它是 "abc" 的字母异位词。
	起始索引等于 6 的子串是 "bac", 它是 "abc" 的字母异位词。

思路:

固定长度为len(p)的窗口向前移动,判断窗口是否为p的字母异位词的子串

代码:

# 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引。(find-all-anagrams-in-a-string)

# 输入:s: "cbaebabacd" p: "abc"
# 输出:[0, 6]
# 解释:
# 起始索引等于 0 的子串是 "cba", 它是 "abc" 的字母异位词。
# 起始索引等于 6 的子串是 "bac", 它是 "abc" 的字母异位词。

#思路:
#   固定长度为len(p)的窗口向前移动,判断窗口是否为p的字母异位词的子串

def String2Map(s):
    #把字符串改写为字典形式
    #输入:'aabc'
    #输出:{'a':2,'b':1,'c':1}
    dict_map = {}
    for i in s:
        if i in dict_map:
            dict_map[i] += 1
        else:
            dict_map[i] = 1
    return dict_map


def findAnagrams(s,p):
    #p的长度,即我们固定的窗口长度
    length=len(p)
    #用字典来确定两字符串是否一致
    p_map=String2Map(p)
    #储存结果
    res=[]
    for i in range(len(s)-length+1):
        #窗口对应字典和所需字典一致且字符串不同时记录下标
        if String2Map(s[i:i+length])==p_map and s[i:i+length]!=p:
            res.append(i)
    return res

s="cbaebabacdabc"
p="abc"
print(findAnagrams(s,p))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值