438.找到字符串中所有字母异位词

class Solution:
def findAnagrams(self, s: str, p: str) -> List[int]:
l=0
r=0
res = []
p_d = {}
windows_d = {}
for _ in p:
p_d[_] = p_d.get(_,0)+1

    while(r<len(s)):
        #如果字母不在子串中,清空窗口字典,同时移动左右窗口
        if s[r] not in p:
            l=r=r+1
            windows_d.clear()
        #当字母在子串中,窗口字典计数
        windows_d[s[r]] = windows_d.get(s[r],0)+1
        #当窗口大小和子串长度相等时,判断二者是否相等
        if r-l+1 == len(p):
            if windows_d==p_d:
                res.append(l)
            #将左边窗口右滑,修改窗口字典
            windows_d[s[l]] = windows_d[s[l]]-1
            l=l+1
        #将右边窗口右滑,进行下一轮判断
        r=r+1
    return res

原文地址:https://www.cnblogs.com/wangshujaun/p/12303403.html

时间: 2024-10-10 00:08:31

438.找到字符串中所有字母异位词的相关文章

leetcode 438. 找到字符串中所有字母异位词(Find All Anagrams in a String)

目录 题目描述: 示例 1: 示例 2: 解法: 题目描述: 给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100. 说明: 字母异位词指字母相同,但排列不同的字符串. 不考虑答案输出的顺序. 示例 1: 输入: s: "cbaebabacd" p: "abc" 输出: [0, 6] 解释: 起始索引等于 0 的子串是 "

[LeetCode]438. 找到字符串中所有字母异位词

题目 给定一个字符串?s?和一个非空字符串?p,找到?s?中所有是?p?的字母异位词的子串,返回这些子串的起始索引. 字符串只包含小写英文字母,并且字符串?s?和 p?的长度都不超过 20100. 说明: 字母异位词指字母相同,但排列不同的字符串. 不考虑答案输出的顺序. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/find-all-anagrams-in-a-string 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明

c++滑动窗口进阶版求找到字符串中所有字母异位词

/** * 问题:找到字符串中所有字母异位词 * 要求:给定一个字符串 s 和一个非空字符串 p,找到 s 中所有是 p 的字母异位词的子串,返回这些子串的起始索引. * 注意事项:字符串只包含小写英文字母,并且字符串 s 和 p 的长度都不超过 20100. * 方法1:利用滑动数组去做 * class Solution { private: vector<int>list; int a[26]={0}; int b[26]={0}; public: vector<int> fi

python学习:找到字符串中第一个只出现一次的字母

''' 找出字符串中第一个只出现一次的字符 ''' def searFisrt(str):     #定义一个数据字典     dic={}     for i in range(len(str)):         if str[i] in dic:             dic[str[i]]+=1         else:             dic[str[i]]=1     for i in range(len(str)):          if dic[str[i]]==1

【初级算法】15. 有效的字母异位词

题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词. 例如, s = "anagram",t = "nagaram",返回 true s = "rat",t = "car",返回 false 注意: 假定字符串只包含小写字母. 提升难度: 输入的字符串包含 unicode 字符怎么办?你能能否调整你的解法来适应这种情况? 1,解题思路: 本题比较简单,直接统计两个字符串中128个字符出现

字母异位词分组

给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan", "ate", "nat", "bat"], 输出: [ ["ate","eat","tea"], ["nat","tan"], ["

LeetCode 第49题 字母异位词分组

(一) 题目描述 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan", "ate", "nat", "bat"], 输出: [ ["ate","eat","tea"], ["nat","tan"]

leetCode242 有效的字母异位词

引言: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram"输出: true示例 2: 输入: s = "rat", t = "car"输出: false说明:你可以假设字符串只包含小写字母. 题目分析: 1.什么是字母异位词? 所谓字母异位词是指,两个字符串中含有相同类型且相同数目的字母,只是字母的排列顺序出现了异位.

【中级算法】49. 字母异位词分组

题目: 给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan", "ate", "nat", "bat"], 输出: [ ["ate","eat","tea"], ["nat","tan"], [&q