【算法专题突破】滑动窗口 - 找到字符串中所有字母异位词(14)

简介: 【算法专题突破】滑动窗口 - 找到字符串中所有字母异位词(14)

1. 题目解析

题目链接:438. 找到字符串中所有字母异位词 - 力扣(Leetcode)

这道题很好理解,就是找出从不同位置开始的所有异位词。

2. 算法原理

那我们该如何快速判断是否是异位词呢?

因为异位词的字符种类和数量是一样的,用哈希表就可以很容易的比较。

思路和代码都还是比较简单的:

我们直接维护一个定长的窗口,

然后通过把字符插入哈希计数,然后每走一步判断是否是异位词即可。

3. 代码编写

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        unordered_map<char, int> win;
        unordered_map<char, int> cmp;
        vector<int> ans;
        for(auto e : p) cmp[e]++;
        int left = 0, right = 0;
        while(right < s.size()) {
            win[s[right++]]++;
            if(right - left > p.size()) {
                win[s[left]]--;
                if(win[s[left]] == 0) win.erase(s[left]);
                left++;
            }
            if(win == cmp) ans.push_back(left);
        }
        return ans;
    }
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

相关文章
|
3天前
|
算法
|
4月前
|
算法
【算法】滑动窗口——最小覆盖子串
【算法】滑动窗口——最小覆盖子串
|
4月前
|
算法
【算法】滑动窗口——找到字符串中所有字母异位词
【算法】滑动窗口——找到字符串中所有字母异位词
|
2月前
|
算法
两个字符串匹配出最长公共子序列算法
本文介绍了最长公共子序列(LCS)问题的算法实现,通过动态规划方法求解两个字符串的最长公共子序列,并提供了具体的编程实现细节和示例。
105 1
两个字符串匹配出最长公共子序列算法
|
2月前
|
算法
条件运算符与条件if的姻缘,打擂台算法和大小写字母转换,if逻辑避坑
条件运算符与条件if的姻缘,打擂台算法和大小写字母转换,if逻辑避坑
34 1
|
4月前
|
算法 Java
掌握算法学习之字符串经典用法
文章总结了字符串在算法领域的经典用法,特别是通过双指针法来实现字符串的反转操作,并提供了LeetCode上相关题目的Java代码实现,强调了掌握这些技巧对于提升算法思维的重要性。
|
4月前
|
算法 容器
【算法】滑动窗口——串联所有单词的子串
【算法】滑动窗口——串联所有单词的子串
|
4月前
|
算法
【算法】滑动窗口——水果成篮
【算法】滑动窗口——水果成篮
|
4天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
119 80
|
1天前
|
机器学习/深度学习 算法 索引
单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA
本项目使用FW烟花优化算法求解单目标问题,并在MATLAB2022A中实现仿真,对比PSO和GA的性能。核心代码展示了适应度计算、火花生成及位置约束等关键步骤。最终通过收敛曲线对比三种算法的优化效果。烟花优化算法模拟烟花爆炸过程,探索搜索空间,寻找全局最优解,适用于复杂非线性问题。PSO和GA则分别适合快速收敛和大解空间的问题。参数调整和算法特性分析显示了各自的优势与局限。

热门文章

最新文章