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

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

时间:2024-11-25 21:31:25浏览次数:8  
标签:count 输出 计数 异位 Counter print leetcode100 lp 字符串

1、题目描述

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

示例 1:

输入: s = "cbaebabacd", p = "abc"

输出: [0,6]

解释: 起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。 起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。

2、初始思路

2.1 思路

前后指针同时进行寻找

2.2 犯错点

需要根据p的长度创建指针,超出时间限制

3 优化算法

3.1 思路

使用collections.Counter进行技术操作,创建滑动窗口进行求解。

from collections import Counter 
class Solution(object):
    def findAnagrams(self, s, p):
        """
        :type s: str
        :type p: str
        :rtype: List[int]
        """
        ls = len(s)
        lp = len(p)
        count_p = Counter(p)
        count_s = Counter(s[:lp-1])
        result = []
        if ls < lp:
            return result
        for i in range(lp-1,ls):
            count_s[s[i]] += 1
            if count_p == count_s:
                result.append(i-lp+1)
            count_s[s[i-lp+1]] -= 1
            if count_s[s[i-lp+1]] == 0:
                del count_s[s[i-lp+1]]
        return result

4 总结--Counter

collections.Counter 是 Python 标准库中的一个类,用于计数可哈希对象(通常是字符串中的字符)。它是一个字典的子类,其中元素作为键,它们的计数作为值。

4.1 创建Counter

(1)从可迭代对象进行创建

from collections import Counter

c = Counter('abracadabra')
print(c)  # 输出: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})

(2)从字典创建

c = Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})
print(c)  # 输出: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})

(3)直接使用关键字参数进行创建

c = Counter(a=5, b=2, r=2, c=1, d=1)
print(c)  # 输出: Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1})

4.2 Counter的使用

(1)elements():返回一个迭代器,每个元素重复其计数的次数

c = Counter(a=4, b=2, c=1)
print(list(c.elements()))  # 输出: ['a', 'a', 'a', 'a', 'b', 'b', 'c']

(2)most_common([n]):返回一个列表,内容为最常见的n个元素及其计数,按技术从高到低进行排序,如果n不指定,则输出所有元素。

c = Counter('abracadabra')
print(c.most_common(3))  # 输出: [('a', 5), ('b', 2), ('r', 2)]

(3)subtract([iterable-or-mapping]):从一个可迭代对象或另一个映射(或计数器)中减去元素的计数。

c = Counter(a=4, b=2, c=1)
c.subtract({'a': 2, 'b': 1})
print(c)  # 输出: Counter({'a': 2, 'b': 1, 'c': 1})

(4)update([iterable-or-mapping]):增加元素的计数,类似于字典的 update 方法。

c = Counter(a=4, b=2, c=1)
c.update({'a': 2, 'b': 1})
print(c)  # 输出: Counter({'a': 6, 'b': 3, 'c': 1})

(5)访问和修改计数:你可以像访问字典一样访问和修改 Counter 中的计数。

c = Counter(a=4, b=2, c=1)
print(c['a'])  # 输出: 4
c['a'] += 1
print(c['a'])  # 输出: 5

(6)删除元素:如果某个元素的计数变为 0,它不会从 Counter 中删除。你可以手动删除它。

c = Counter(a=4, b=2, c=1)
del c['a']
print(c)  # 输出: Counter({'b': 2, 'c': 1})

标签:count,输出,计数,异位,Counter,print,leetcode100,lp,字符串
From: https://blog.csdn.net/qq_65509025/article/details/144009062

相关文章

  • Jackson:Java对象和JSON字符串的转换处理库使用指南
    Jackson介绍Jackson是一个非常流行的JavaJSON处理库,它能够将Java对象与JSON字符串相互转换。Jackson工具主要用于将请求的参数(例如前端发送的JSON数据)和响应的数据(例如后端返回给前端的数据)转换成Java对象,或者将Java对象转换为JSON格式的字符串。使用示......
  • 统计字符串中整数个数并分别输出数字(超级详细)
    【问题描述】输入一行字符串,不要超过80个字符,含有数字和非数字字符以及空格等,如:df23adfd562343?23dgjop535如果将其中所有连续出现的数字视为一个整数,要求统计在该字符串中共有多少个整数,并将这些数依次输出。【输入说明】只有一行,含有数字和其它任意字符。该行最长含80......
  • 一篇文章看懂字符串哈希
    定义将一个字符串映射至一个整数\(w\)后称\(w\)为该字符串的\(hash\)值。性质对于一个固定的字符串,其在使用相同\(hash\)生成方式下得到的\(hash\)值唯一,而且对于每一个固定的\(hash\)值,其所对应的字符串在很大概率下是唯一的,因此我们在求出字符串的\(hash\)值后可以通过判断两......
  • 关于C语言 字符串(字符数组)s
    关于charC语言中的字符型用关键字char表示,它实际存储的是ASC码。字符常量可以用单引号法表示。在语法上可以把字符当做int型使用。字符串的实际长度每次存储字符串,应多分配字符个数加1,因为C语言的字符串被读取后会添加空字符"\0"结尾例如:存储"2357"到chara[20]中,a会存储......
  • ybtoj:字符串处理
    A:点击查看代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn; cin>>n; if(n<0) { cout<<"-"; } n=abs(n); boolb=0; while(n>0) { if(n%10!=0) { cout<<n%10; b=1; } elseif(b==1) {......
  • 递归(力扣:生成不含相邻零的二进制字符串
    题目(生成不含相邻零的二进制字符串)        给你一个正整数 n。        如果一个二进制字符串 x 的所有长度为2的子字符串中包含 至少 一个 "1",则称 x 是一个 有效 字符串。        返回所有长度为 n 的 有效 字符串,可以以任意顺......
  • char字符串
    在C语言中,字符串 是由 char 类型的数组组成并以空字符('\0')结束的字符序列。C语言并没有内置的字符串类型,字符串实际上是一个字符数组,而空字符是用来标识字符串的结束。下面是关于C语言中字符串的一些重要内容:1.字符串的定义字符串可以通过两种方式定义:直接用双......
  • 「Mac玩转仓颉内测版27」基础篇7 - 字符串类型详解
    本篇将介绍Cangjie中的字符串类型,包括字符串的定义、字面量形式、插值表达、常用操作及应用场景,帮助开发者熟练掌握字符串的使用。关键词字符串类型定义字符串字面量插值字符串字符串拼接常用操作一、字符串类型概述在Cangjie中,字符串是一组Unicode字符的集合,用......
  • 提高组字符串专题1
    A[NOIP2020]字符串匹配枚举循环节\(AB\),找到最多的循环节,剩下的一定包含在\(C\)。然后可以发现的是\(F(C)=F((AB)^kC),k>1\),那么就只用考虑\(C\)和\(ABC\)的贡献即可。复杂度\(\mathcal{O}(N\logN)\)。#include<bits/stdc++.h>usingnamespacestd;constexprintN......
  • Mybatis-plus如何处理数据库字段是字符串类型的情况
    一、背景项目中遇到这样的情况,存在一个数据库表,我们需要用Mybatis对这个表进行操作。其中有时间字段,但是居然类型是varchar,这样我们编写的实体类里面对应的类型必须是String?还是LocalDateTime?二、正确的处理方式实体的字段类型仍然需要是LocalDateTime,这样才能保证我们时间......