首页 > 其他分享 >438. 找到字符串中所有字母异位词

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

时间:2023-07-21 14:33:46浏览次数:30  
标签:int 异位 ++ valid mp 438 字符串

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

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


示例 1:

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

> 思路

***采用滑动窗口的做法

> 代码


class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        int len1 = s.size();
        int len2 = p.size();
        if(len1 < len2) return {};
        unordered_map<char,int> mp_s;
        unordered_map<char,int> mp_p;
        for(const auto &c:p){
            mp_p[c]++;
        }
        int l = 0;int r = 0;int valid = 0;
        vector<int> res;
        sort(p.begin(),p.end());
        while(r < len1){
            //扩大窗口
            if(mp_p.count(s[r])){
                mp_s[s[r]]++;
                if(mp_p[s[r]] == mp_s[s[r]]){
                    valid++;
                }
            }
            //满足条件 缩小窗口
            while(r - l + 1 >= len2){
                if(valid == mp_p.size()){
                    res.push_back(l);
                }
                if(mp_p.count(s[l])){
                    if(mp_p[s[l]] == mp_s[s[l]]){
                        valid--;
                    }
                    mp_s[s[l]]--;
                }
                l++;
            }
            r++;
        }
        return res;
    }
};

标签:int,异位,++,valid,mp,438,字符串
From: https://www.cnblogs.com/lihaoxiang/p/17571258.html

相关文章

  • Vue3 响应式全局对象json 动态绑定界面三 (Div块样式 字符串叠加)
    效果 man.js  定义响应式全局对象 globalData//全局对象constglobalData=reactive({missedCallData:"",currentUserTel:"",})app.provide('globalData',globalData);在main.js的函数中改变missedCallData 的值从而改变界面列表//改变全局变量gl......
  • 字符串练习
    P4081[USACO17DEC]StandingOutfromtheHerdP只有一个串怎么做?那就是P2408不同子串个数。跑一遍后缀排序,按排序结果遍历后缀,考虑每个后缀会产生多少新串。为保证每个不同的串只被记录一次,只考虑去掉它与上一个串的重复部分,即为\(height_i\)。多个串类似,在串中加上......
  • 9Java中如何判断一个字符串是否包含另一个子串
    在Java中,我们经常会遇到需要判断一个字符串是否包含另一个子串的情况。对于这个问题,我们可以使用一些简单而有效的方法来解决。本文将介绍几种常见的方法,以及它们的优缺点。方法一:使用contains方法Java中的String类提供了一个contains方法,可以很方便地判断一个字符串是否包含另......
  • 【求助+半题解】BZOJ1461字符串的匹配
    先说思路:因为我们是比对较短的\(B\)与较长的\(A\)的子串,所以我们求不变的\(B\)的\(next\)对于这道题我们可以使用树状数组查询前缀和维护数的排名。对于相同的数我们查询的排名是有误的,因此不仅要比对小于等于该数的前缀和,也要比对小于该数的前缀和。如:对于\(A=2\)\(2\),\(B......
  • C++ 不用现成的类库 实现两个非负整数的字符串的和
    给定两个非负整数的字符串num1 和num2 ,返回num1与num2的和Note: num1 和num2 长度都小于5100. num1 和num2 只包含0-9的数字.num1 和num2 开头不为0.不能用现成的类库直接将输入的字符串转换成整数思路:从低位开始遍历相加,和≥10标记add_val=1,<10标记add_val=......
  • python字符串转化为列表
    Python字符串转化为列表的步骤作为一名经验丰富的开发者,我会向你介绍如何将Python字符串转化为列表。下面是整个过程的步骤:步骤描述步骤1输入一个字符串步骤2使用split()方法将字符串拆分成一个列表步骤3得到转化后的列表接下来,我将详细解释每个步骤中要做......
  • python字符串转int
    Python字符串转int的实现方法简介在Python编程中,经常需要将字符串转换为整数。字符串转int的过程可以使用内置的int()函数来实现。本文将详细介绍这个过程的步骤和相关代码,并给出相应的注释说明。字符串转int的步骤下面是将字符串转换为整数的步骤:步骤描述1获取输入......
  • python字符串正则截取
    Python字符串正则截取的实现1.简介正则表达式是一种用来描述、匹配一定模式字符串的工具。在Python中,我们可以使用re模块来进行字符串的正则截取。本文将为你提供实现Python字符串正则截取的详细步骤和代码示例。2.实现步骤下表中展示了实现Python字符串正则截取的步骤:步......
  • python字符串原样输出
    如何实现Python字符串原样输出对于刚入行的小白开发者来说,可能会遇到一些让人困惑的问题。其中之一就是如何实现Python字符串原样输出。在本文中,我将向你解释整个过程,并提供每一步所需的代码。流程为了更好地理解整个过程,让我们首先通过表格展示实现Python字符串原样输出的步骤......
  • 用Python删除含有特定字符串的列
    用Python删除含有特定字符串的列作为一名经验丰富的开发者,你可以帮助那些刚入行的小白解决一些常见的编程问题。本篇文章将教会你如何使用Python删除含有特定字符串的列。整体流程在开始编写代码之前,我们需要先了解整个流程以及需要的步骤。下表展示了实现这个任务的步骤及其解......