LeetCode 热题 100(二):滑动窗口。3. 无重复字符的最长子串、 438.找到字符串中所有字母异位词

滑动窗口例题:

一、3. 无重复字符的最长子串

题目要求:就是说找到包含不同字母最长的串。

思路:可以想到使用set去重,同时应用滑动窗口。本质上还是双指针法,l是窗口左边界

r是窗口右边界。 如果set包含了当前字母就直接删除左边界的值。

注意:一定是比较max_num与set大小

代码:

java 复制代码
public class c无重复字符的最长子串 {
    public int lengthOfLongestSubstring(String s) {
        // 使用set去重
        Set<Character> set = new HashSet<>();
        int l = 0;
        int r = 0;
        // 返回值
        int max_sum = 0;
        // 
        while (r < s.length()){
            // 当set不包含当前字母时就直接add  并窗口右移
            if (!set.contains(s.charAt(r))){
                set.add(s.charAt(r));
                r++;
            }else{
                set.remove(s.charAt(l));
                l++;
            }
            max_sum = Math.max(max_sum, set.size());
        }
        return max_sum;
    }
}

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

1.题目要求:

2.思路:仍然是滑动窗口; 不过特殊在需要对s中的前p长度的字符串进行单独处理。

3.代码:

java 复制代码
public class c找到字符串中所有字母异位词 {
    public List<Integer> findAnagrams(String s, String p) {
        // 使用固定窗口
        // len1指定为字符串s的长度
        int len1 = s.length();
        int len2 = p.length();
        if (len2 > len1) return new ArrayList<>();

        // 数组a保存字符串s即待匹配的字符串
        // 数组b保存模板字符串
        int[] a = new int[26];
        int[] b = new int[26];
        int l = 0, r = len2;
        List<Integer> res = new ArrayList<>();
        // 一方面保存好模式串的数组,一方面将p长度的字符串大小进行匹配
        for (int i = 0; i < len2; i++) {
            a[s.charAt(i) - 'a']++;
            b[p.charAt(i) - 'a']++;
        }
        // 如果s中前len2长度的字符串能匹配就直接add 0
        if (Arrays.equals(a, b))
            res.add(0);
        // 然后使用滑动窗口逐一匹配
        while (r < len1){
            // 数组更新
            a[s.charAt(r) - 'a'] ++;
            a[s.charAt(l) - 'a'] --;
            // 字符串匹配
            if (Arrays.equals(a, b))
                res.add(l + 1);
            // 窗口滑动
            l++;
            r++;
        }
        return res;
    }
}
相关推荐
leluckys1 天前
算法-链表-二、成对交换两个节点
数据结构·算法·链表
小糯米6011 天前
C++ 排序
c++·算法·排序算法
未来之窗软件服务1 天前
幽冥大陆(一百12)js打造json硬件管道——东方仙盟筑基期
开发语言·javascript·算法·json·仙盟创梦ide·东方仙盟·东方仙盟算法
放下华子我只抽RuiKe51 天前
AI大模型开发-实战精讲:从零构建 RFM 会员价值模型(进阶挑战版)
人工智能·深度学习·算法·机器学习·数据挖掘·数据分析·聚类
Nontee1 天前
Leetcode Top100答案和解释 -- Python版本(链表)
算法·leetcode·链表
niuniudengdeng1 天前
六面独立转动魔方还原机器人设计与实现
数学·算法·机器人
ghie90901 天前
基于MATLAB的A*算法避障路径规划实现
人工智能·算法·matlab
雾岛听蓝1 天前
C文件操作与系统IO
linux·c语言·开发语言·经验分享·笔记·算法
zh路西法1 天前
【宇树机器人强化学习】(一):PPO算法的python实现与解析
python·深度学习·算法·机器学习·机器人