LeetCode:438. 找到字符串中所有字母异位词

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

1)题目

给定两个字符串 sp,找到 s 中所有 p异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。

示例 1:

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

示例 2:

输入: s = “abab”, p = “ab”
输出: [0,1,2]
解释:
起始索引等于 0 的子串是 “ab”, 它是 “ab” 的异位词。
起始索引等于 1 的子串是 “ba”, 它是 “ab” 的异位词。
起始索引等于 2 的子串是 “ab”, 它是 “ab” 的异位词。

提示:

  • 1 <= s.length, p.length <= 3 * 104
  • s 和 p 仅包含小写字母

2)思路

参考的官方题解下的这个思路
在这里插入图片描述

3)代码

public static List<Integer> findAnagrams(String s, String p) {
   
    List<Integer> result = new ArrayList<>();
    int sLen = s.length();
    int pLen = p.length();
    if (sLen < pLen) return result;

    int[] hashTable = new int[26];
    // 统计字符串p中每个字符出现的次数
    for (int i = 0; i < pLen; i++) {
   
        hashTable[p.charAt(i) - 'a']++; // 对应数组元素+1
    }

    for (int r = 0, l = 0; r < sLen; r++) {
   
        hashTable[s.charAt(r) - 'a']--;   // 对应数组元素-1
        // 对应数组元素不能为负数,否则缩小窗口并补齐前面的元素
        while (hashTable[s.charAt(r) - 'a'] < 0) {
   
            hashTable[s.charAt(l) - 'a']++;
            l++;
        }
        // 此时如果窗口长度等于p的长度,记录左指针的值
        if (r - l + 1 == pLen) result.add(l);
    }
    return result;
}

4)结果

在这里插入图片描述

最近更新

  1. TCP协议是安全的吗?

    2024-02-19 13:58:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-19 13:58:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-19 13:58:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-19 13:58:01       18 阅读

热门阅读

  1. SpringCloud:日志traceId错乱

    2024-02-19 13:58:01       27 阅读
  2. Redis为什么被设计为单线程

    2024-02-19 13:58:01       29 阅读
  3. python_数据分析_numpy库

    2024-02-19 13:58:01       29 阅读
  4. redis键的过期删除策略

    2024-02-19 13:58:01       27 阅读
  5. 第1章 计算机系统概述(2)

    2024-02-19 13:58:01       29 阅读
  6. 突破编程_C++_面试(变量与常量)

    2024-02-19 13:58:01       28 阅读
  7. httpclient发送post请求、httpclient上传文件

    2024-02-19 13:58:01       23 阅读
  8. C语言之删除字符串中间和后面的*

    2024-02-19 13:58:01       31 阅读
  9. c++ 6

    c++ 6

    2024-02-19 13:58:01      25 阅读
  10. Kubernetes基础(二十一)-k8s的服务发现机制

    2024-02-19 13:58:01       27 阅读