【LeetCode热题100】--48.找到字符串中所有字母异位词

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

使用滑动窗口:

由于字符串p的异位词的长度一定与字符串p的长度相同,所以我们可以在字符串s中构造一个长度为字符串p的长度相同的滑动窗口,并在滑动中维护窗口中每种字母的数量;当窗口中每种字母的数量与字符串p中每种字母的数量相同,则说明当前窗口为字符串p的异位词

在算法实现中,我们可以使用数组来存储字符串p和滑动窗口中每种字母的数量

当字符串s的长度小于字符串p的长度时,字符串s中一定不存在字符串p的异位词,但是因为字符串s中无法构造长度与字符串p的长度相同的窗口,所以这种情况需要单独处理

代码:

java 复制代码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Demo {
    public static List<Integer> findAnagrams(String s, String p) {

        int sLen = s.length(), pLen = p.length();

        if (sLen < pLen) {
            return new ArrayList<Integer>();
        }

        List<Integer> ans = new ArrayList<Integer>();
        int[] sCount = new int[26];
        int[] pCount = new int[26];
        for (int i = 0; i < pLen; ++i) {
            sCount[s.charAt(i) - 'a']++;
            pCount[p.charAt(i) - 'a']++;
        }


        if (Arrays.equals(sCount, pCount)) {
            ans.add(0);
        }

        for (int i = 0; i < sLen - pLen; ++i) {
            --sCount[s.charAt(i) - 'a'];
            ++sCount[s.charAt(i + pLen) - 'a'];

            if (Arrays.equals(sCount, pCount)) {
                ans.add(i + 1);
            }
        }

        return ans;
    }
    public static void main(String[] args) {
        String s = "cbaebabacd";
        String p = "abc";
        List<Integer> ans = new ArrayList<Integer>();
        ans = findAnagrams(s,p);
        System.out.println(ans);

    }
}

在IDEA中调试进一步理解这个算法:

相关推荐
pianmian13 小时前
贪心算法.
算法·贪心算法
m0_694938014 小时前
Leetcode打卡:字符串及其反转中是否存在同一子字符串
linux·服务器·leetcode
chenziang14 小时前
leetcode hot 100 二叉搜索
数据结构·算法·leetcode
single5945 小时前
【c++笔试强训】(第四十五篇)
java·开发语言·数据结构·c++·算法
呆头鹅AI工作室6 小时前
基于特征工程(pca分析)、小波去噪以及数据增强,同时采用基于注意力机制的BiLSTM、随机森林、ARIMA模型进行序列数据预测
人工智能·深度学习·神经网络·算法·随机森林·回归
一勺汤7 小时前
YOLO11改进-注意力-引入自调制特征聚合模块SMFA
人工智能·深度学习·算法·yolo·目标检测·计算机视觉·目标跟踪
每天写点bug7 小时前
【golang】map遍历注意事项
开发语言·算法·golang
程序员JerrySUN7 小时前
BitBake 执行流程深度解析:从理论到实践
linux·开发语言·嵌入式硬件·算法·架构
王老师青少年编程8 小时前
gesp(二级)(16)洛谷:B4037:[GESP202409 二级] 小杨的 N 字矩阵
数据结构·c++·算法·gesp·csp·信奥赛
robin_suli9 小时前
动态规划子序列问题系列一>等差序列划分II
算法·动态规划