【重点】【滑动窗口】438. 找到字符串中所有字母异位词

news/2024/5/20 6:30:58 标签: 滑动窗口

题目

1.自己想的垃圾方法

class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        List<Integer> res = new ArrayList<>();
        char[] sArray = s.toCharArray();
        char[] pArray = p.toCharArray();
        Arrays.sort(pArray);
        String pSorted = String.valueOf(pArray);
        Set<Character> pSet = new HashSet<>();
        for (char c : pArray) {
            pSet.add(c);
        }

        for (int i = 0; i <= s.length() - p.length(); ++i) {
            if (!pSet.contains(sArray[i])) {
                continue;
            }
            
            char[] tmpArray = new char[p.length()];
            for (int j = i; j - i < p.length(); ++j) {
                tmpArray[j - i] = sArray[j];
            }
            Arrays.sort(tmpArray);
            String tmp = String.valueOf(tmpArray);
            if (tmp.equals(pSorted)) {
                res.add(i);
            }
        }

        return res;
    }
}

2.滑动窗口

重点学习《算法小抄》上关于滑动窗口模板几道题的总结对比!

class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        List<Integer> res = new ArrayList<>();
        char[] sArray = s.toCharArray();
        char[] pArray = p.toCharArray();
        int[] need = new int[256];
        Set<Character> set = new HashSet<>();
        int[] window = new int[256];
        for (char c : pArray) {
            ++need[c];
            set.add(c);
        }
        int valid = 0,left = 0, right = 0;
        while (right < sArray.length) {
            char cur = sArray[right];
            ++right;
            if (need[cur] > 0) {
                ++window[cur];
                if (need[cur] == window[cur]) {
                    ++valid;
                }
            }
            while (right - left >= pArray.length) {
                if (valid == set.size()) {
                    res.add(left);
                }
                char d = sArray[left];
                ++left;
                if (need[d] > 0) {
                    if (window[d] == need[d]) {
                        --valid;
                    }
                    --window[d];
                }
            }
        }

        return res;
    }
}

http://www.niftyadmin.cn/n/5236239.html

相关文章

mysql(八)docker版Mysql8.x设置大小写忽略

Mysql 5.7设置大小写忽略可以登录到Docker内部&#xff0c;修改/etc/my.cnf添加lower_case_table_names1&#xff0c;并重启docker使之忽略大小写。但MySQL8.0后不允许这样&#xff0c;官方文档记录&#xff1a; lower_case_table_names can only be configured when initializ…

网络安全现状

威胁不断演变&#xff1a; 攻击者不断变化和改进攻击方法&#xff0c;采用更复杂、更隐秘的技术&#xff0c;以逃避检测和追踪。这包括新型的勒索软件、零日漏洞利用和社交工程攻击等。 供应链攻击&#xff1a; 攻击者越来越关注供应链的弱点&#xff0c;通过在供应链中植入恶…

Spring cloud - gateway

什么是Spring Cloud Gateway 先去看下官网的解释&#xff1a; This project provides an API Gateway built on top of the Spring Ecosystem, including: Spring 6, Spring Boot 3 and Project Reactor. Spring Cloud Gateway aims to provide a simple, yet effective way t…

Elasticsearch:什么是向量数据库?

向量数据库定义 向量数据库是将信息存储为向量的数据库&#xff0c;向量是数据对象的数值表示&#xff0c;也称为向量嵌入。 它利用这些向量嵌入的强大功能来对非结构化数据和半结构化数据&#xff08;例如图像、文本或传感器数据&#xff09;的海量数据集进行索引和搜索。 向…

能源企业管理ERP系统都有哪些?可以帮助企业解决哪些难点

能源企业在不同的发展阶段面对的经营压力以及遇到的管理问题各异&#xff0c;随着部分产品结构的复杂化&#xff0c;日常经营管理工作也愈加繁琐。 有些能源企业内部存在信息传递不畅、经营数据统计不及时、部门协作效率低、多仓库和多平台数据不统一等情况&#xff0c;而这些…

大数据技术学习笔记(七)—— Zookeeper

目录 1 Zookeeper 概述1.1 Zookeeper 定义1.2 Zookeeper 工作机制1.3 Zookeeper 特点1.4 数据结构1.5 应用场景 2 Zookeeper 安装3 客户端命令行操作4 Zookeeper 的 Java 客户端操作4.1 IDEA 环境搭建4.2 初始化 ZooKeeper 客户端4.3 创建子节点4.4 获取子节点4.5 判断Znode是否…

通义灵码简单使用例子

首先我们需要了解到通义灵码的能力&#xff1a; 行/函数级实时续写&#xff1a; 当我们在 idea进行代码编写时(确认开启了自动云端生成的模式)&#xff0c;通义灵码会根据当前代码文件及相关代码文件的上下文&#xff0c;自动为你生成代码建议。你可以不用&#xff0c;也可以t…

[RK-Linux] 移植Linux-5.10到RK3399(二)| 检查系统电源域

检查电源域(Power Domain)是确保供电电源的稳定和正确,也能避免防止出现莫名其妙的 BUG,造成问题难以排查。 具体作用大致如下: 供电稳定性:检查电源域可以确保芯片和各个功能模块得到稳定的电源供应。稳定的供电对于芯片的- 常运行和各个功能模块的工作至关重要。功耗管…