Leetcode Hot 1001 分钟
5 次阅读

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

这里写一句文章摘要。

找到字符串中所有字母异位词 封面图

题目​

438. 找到字符串中所有字母异位词 - 力扣(LeetCode)

解答

思路

字母异位词的概念及解决方法在之前就出现过,可见LeetCode 49. 字母异位词分组 - 两种哈希表解法 | 与子同程

在该篇文章中,一共提及了两种处理字母异位词的方法,分别是排序和统计字母出现次数的方法,本题使用后者的方法进行。

由题目可知,本题需要找到子串中的字母异位词,由于字母异位词长度一定相同,故本题用一个指针进行一次遍历的同时维护一个统计字母序列,即可解决。

答案

class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        p_num = [0] * 26
        sub_num = [0] * 26
        for ch in p:
            p_num[ord(ch) - ord('a')] += 1
 
        res = []
        for i in range(len(s)):
            sub_num[ord(s[i]) - ord('a')] += 1
            if sub_num == p_num:
                res.append(i - len(p) + 1)
            if i >= len(p) - 1:
                 sub_num[ord(s[i - len(p) + 1]) - ord('a')] -= 1
 
        return res