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

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

时间:2024-12-18 15:52:48浏览次数:4  
标签:子串 ab 异位 字母 起始 索引 字符串

给定两个字符串 s 和 p,找到 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" 的异位词。

思路:

在字符串 s 中构造一个长度为与字符串 p 的长度相同的滑动窗口,并在滑动中维护窗口中每种字母的数量;当窗口中每种字母的数量与字符串 p 中每种字母的数量相同时,则说明当前窗口为字符串 p 的异位词。

在算法的实现中,我们可以使用数组来存储字符串 p 和滑动窗口中每种字母的数量。

 

class Solution {
public:
    vector<int> findAnagrams(string s, string p) {
        int m = s.size();
        int n = p.size();
        vector<int> res;
        if(n>m) return res;////特殊情况处理
        vector<int> sCount(26);
        vector<int> pCount(26);
        //初始化滑动窗口以及pCount
        for(int i=0;i<n;i++){
            ++sCount[s[i]-'a'];
            ++pCount[p[i]-'a'];
        }
        if(sCount==pCount) res.push_back(0);
        //移动滑动窗口
        for(int i=0;i<m-n;i++){
            --sCount[s[i]-'a'];
            ++sCount[s[i+n]-'a'];
            if(sCount==pCount) res.push_back(i+1);
        }
        return res;
    }
};

 

标签:子串,ab,异位,字母,起始,索引,字符串
From: https://www.cnblogs.com/yueshengd/p/18615146

相关文章

  • 17. 电话号码的字母组合
    题目链接解题思路:一个简单的回溯题目。代码classSolution{public:map<char,string>table{{'2',"abc"},{'3',"def"},{'4',"ghi"},{'5',"jkl"},{'6',"......
  • 代码中对字符串的常用操作有哪些?
    在编程中,字符串处理指的是对字符串(由字符组成的序列)进行的各种操作,包括但不限于查找、修改、分割、连接、格式化等。字符串是编程中非常常见的数据类型之一,几乎所有的编程语言都提供了内建的方法和函数来简化字符串的处理。常见的字符串处理操作描述1. 字符串查找描述:在字......
  • 2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组 points 和一个字符串 s,其中
    2024-12-18:正方形中的最多点数。用go语言,给定一个二维数组points和一个字符串s,其中points[i]表示第i个点的坐标,s[i]表示第i个点的标签。如果一个正方形的中心在(0,0),边与坐标轴平行,并且内部没有标签相同的两个点,则称这个正方形为“合法”的。你的任务是返回可以被“合......
  • Windows ANSI API 是指 Windows 操作系统 提供的一组 应用程序编程接口 (API),它们使用
    WindowsANSIAPI是指Windows操作系统提供的一组应用程序编程接口(API),它们使用ANSI字符集来处理字符串和文本数据。ANSI字符集是较为老旧的字符编码标准,通常对应的是Windows-1252编码(又称Latin-1)。这些API主要用于与字符串和字符数据交互。1. WindowsANSI......
  • 通过指针引用字符串
    通常引用字符串是把其放入一个数组中,通过指针的学习,发现,指针同样可以引用字符串,且更有效率。旧方法:定义一个数组a【】=“所要引用的字符串”。新方法:定义一个指针(字符型)char*string=“所要引用的字符串”,也称对指针变量string的初始化。这个需要解释一下,c语言对字符串常量是按......
  • 28_找出字符串中第一个匹配项的下标
    Leetcode28.找出字符串中第一个匹配项的下标12.17.2024问题描述:给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果needle不是haystack的一部分,则返回-1。1.示例1:-输入:haystack="sadbutsad",needle="s......
  • C语言基础-字符数组与字符串
    字符数组概念元素类型为char字符型的数组,字符数组往往是用来存储字符串数据的。C语言中,字符是字节字符。字节字符:一个字符占一个字节,在C语言中,使用char表示字节chara='A';charb='1';charc=65;//以上都是正确的chard="A";chare='司';//以上都是错......
  • Python字符串及正则表达式(十):字符串常用操作、字符串编码转换
    前言:在编程的世界里,字符串无处不在。它们是构建用户界面、存储数据、进行通信的基础元素。无论是财务系统的总账报表、电子游戏的比赛结果,还是火车站的列车时刻表,这些信息最终都需要以文本的形式呈现给用户。这些文本的背后,是程序经过精确计算、逻辑判断和数据整理的结果,它......
  • Python字符串及正则表达式(十):字符串常用操作、字符串编码转换
    前言:在编程的世界里,字符串无处不在。它们是构建用户界面、存储数据、进行通信的基础元素。无论是财务系统的总账报表、电子游戏的比赛结果,还是火车站的列车时刻表,这些信息最终都需要以文本的形式呈现给用户。这些文本的背后,是程序经过精确计算、逻辑判断和数据整理的结果,它们将复......
  • 【华为OD-E卷-字符串重新排序 字符串重新排列 100分(python、java、c++、js、c)】
    【华为OD-E卷-字符串重新排序字符串重新排列100分(python、java、c++、js、c)】题目给定一个字符串s,s包括以空格分隔的若干个单词,请对s进行如下处理后输出:1、单词内部调整:对每个单词字母重新按字典序排序2、单词间顺序调整:1)统计每个单词出现的次数,并按次数降序排列2)次......