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

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

时间:2024-09-13 23:04:52浏览次数:12  
标签:count ch 异位 len answer 438 字符串 diff ord

题目链接 438. 找到字符串中所有字母异位词
思路 滑动窗口
题解链接 官方题解
关键点 顺序比较;判断的状态量可以依此变更时应当使用“滑动窗口”的方式进行更新
时间复杂度 \(O(m + (n-m)\times\sum)\)
空间复杂度 \(O(\sum)\)

代码实现:

class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        s_len = len(s)
        p_len = len(p)
        
        if s_len < p_len:
            return []
        
        answer = []

        s_count = [0] * 26
        p_count = [0] * 26
        a_ord = ord('a')
        for i in range(p_len):
            s_count[ord(s[i]) - a_ord] += 1
            p_count[ord(p[i]) - a_ord] += 1
        
        if s_count == p_count:
            answer.append(0)
        
        for i in range(s_len - p_len):
            s_count[ord(s[i]) - a_ord] -= 1
            s_count[ord(s[i+p_len]) - a_ord] += 1
            if s_count == p_count:
                answer.append(i+1)
        return answer
python-优化版本的滑动窗口 思路:维护“差异量” 时间复杂度:由$O(n+(n-m)\times\sum)$下降至$O(n+m+\sum)$
class Solution:
    def findAnagrams(self, s: str, p: str) -> List[int]:
        s_len = len(s)
        p_len = len(p)
        
        if s_len < p_len:
            return []
        
        answer = []

        a_ord = ord('a')
        ch_diff_count = [0] * 26
        for i in range(p_len):
            ch_diff_count[ord(s[i]) - a_ord] += 1
            ch_diff_count[ord(p[i]) - a_ord] -= 1
        diff = sum([
            item != 0
            for item in ch_diff_count
        ])

        if diff == 0:
            answer.append(0)
        
        for i in range(s_len - p_len):
            index = ord(s[i]) - a_ord
            if ch_diff_count[index] == 1:
                diff -= 1
            elif ch_diff_count[index] == 0:
                diff += 1
            ch_diff_count[index] -= 1

            index = ord(s[i+p_len]) - a_ord
            if ch_diff_count[index] == -1:
                diff -= 1
            elif ch_diff_count[index] == 0:
                diff += 1
            ch_diff_count[index] += 1
            
            if diff == 0:
                answer.append(i+1)
        return answer

标签:count,ch,异位,len,answer,438,字符串,diff,ord
From: https://www.cnblogs.com/WrRan/p/18413045

相关文章

  • 【数据结构】字符串与JSON字符串、JSON字符串及相应数据结构(如对象与数组)之间的相互转
    前言:下面打印日志用的是FastJSON依赖库中的 @Log4j2。依赖:<!--AlibabaFastjson--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.80</version></dependency>目录普通字......
  • python处理时间字符串
    时间格式ISO8601标准"2024-09-11T00:00:03Z"Z的时间字符串表示UTC时间(协调世界时)。Z(Zerooffset/UTC)如果没有Z,通常还可以使用时区偏移来表示时间。例如:2024-09-11T00:00:03+08:00表示东八区的时间(比UTC提前8小时)。2024-09-11T00:00:03-05:00表示比UTC晚5小时的......
  • 掌握CFML:在输出缓冲区中高效搜索字符串的技巧
    掌握CFML:在输出缓冲区中高效搜索字符串的技巧在开发过程中,特别是使用ColdFusionMarkupLanguage(CFML)进行Web开发时,处理大量数据并快速找到特定字符串是一项常见且重要的任务。为了提高程序效率,我们经常需要在输出缓冲区中搜索特定的字符串,并在必要时对其进行处理。本文将分......
  • C语言 11 字符串
    前面学习了数组,而对于字符类型的数组,比较特殊,它实际上可以作为一个字符串(String)表示,字符串就是一个或多个字符的序列,比如在一开始认识的"HelloWorld",像这样的多个字符形成的一连串数据,就是一个字符串,而printf函数接受的第一个参数也是字符串。在C语言中并没有直接提供存储字符......
  • 第七章习题5-写一个函数,使输入的一个字符串按反序存放,在主函数中输入和输出字符串。
     ......
  • 【Python学习笔记】 第7章 字符串基础
    本章范围本章主要讲str字符串类型,有关的操作适用于Unicode处理。Unicode简介ASCII是Unicode的简单形式,但Unicode适用于非英语地区的人们。两者在文件中的编码不同。在Python3.X中,有三种字符串类型:str用于Unicode文本,bytes用于二进制数据,bytearray是bytes的一种可修改的变体......
  • 字符串基本处理
    抽了我的象\(QWQ\)\(string\)可以看作一个$vector<char>$,所以在$string\s\;\s[i]$没申请过时不能用$s[i]=a(char\a)$一个\(cin/scanf\)与\(getline/gets\)间要隔一个\(gets(s)/getline(cin,str)\)来输入换行。\(getline/gets/getchar\)可读空格string的使用......
  • 前端实现字符串插入千位分割符
     前端开发时经常会遇到需要把一个很大的金额或是银行卡号进行千位分割展示,这里分享两个常用的方法:循环遍历字符长度添加和正则替换(此方法仅适用于正整数)letnum=123456789000;functionthousandSplit(number){letstr=String(number)//数字转换为字符串letre......
  • 使用go来做加密解密文件或者字符串
    你可以使用Linux命令行中的openssl或gpg进行加密,然后在Go程序中使用相关的库来解密。方案1:使用OpenSSL进行加密,Go程序解密1.命令行加密使用openssl在命令行中对token进行加密,并保存加密结果:echo-n"your_token"|opensslenc-aes-256-cbc-a-salt-pas......
  • 使用java程序对字符串进行加密
    程序功能程序的功能是对用户输入的字符串,使用常见的三种加密算法(MD5、SHA-1和SHA-256)进行加密,并输出每种算法加密后的结果。主要步骤包括:用户通过控制台输入一个字符串。程序使用MessageDigest类,对输入的字符串分别进行MD5、SHA-1和SHA-256算法的加密处理。每......