LeeCode 438. 找到字符串中所有字母异位词(dict对比值和为0)

内容分享2周前发布
0 0 0

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

之前用dict对比,这儿记录两字符串的字符个数之差,若全为0则认为一致

class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        if len(p) > len(s):
            return []

        l = 0
        r = l + len(p) - 1

        # 记录前一个字符
        pre = []

        # 初始化滑窗字符个数
        s_dict = {}

        diff_counts = {}
        for i in range(len(p)):
            c = p[i]
            if c in diff_counts:
                diff_counts[c] += 1
            else:
                diff_counts[c] = 1

            c = s[i]
            pre.append(c)
            if c in diff_counts:
                diff_counts[c] -= 1
            else:
                diff_counts[c] = -1

        return_arr = []

        diff = 0
        for x in diff_counts.values():
            diff += abs(x)

        if diff == 0:
            return_arr.append(l)

        # 滑动
        l += 1
        r += 1
        while r < len(s):
            diff_counts[pre[0]] += 1

            c = s[r]
            if c in diff_counts:
                diff_counts[c] -= 1
            else:
                diff_counts[c] = -1

            pre = pre[1:] + [c]
           
            diff = 0
            for x in diff_counts.values():
                diff += abs(x)

            if diff == 0:
                return_arr.append(l)

            # print(l)
            # print(diff_counts)

            l += 1
            r += 1

        return return_arr

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
none
暂无评论...