当前位置: 首页 > news >正文

Rabin Karp 字符匹配算法

Rabin Karp 字符匹配算法

相关题目:
187. 重复的DNA序列
28. 找出字符串中第一个匹配项的下标


class FindRepeatedDnaSequences:"""187. 重复的DNA序列https://leetcode.cn/problems/repeated-dna-sequences/description/"""def solution(self, s: str) -> List[str]:nums = [0] * len(s)for i in range(len(nums)):if s[i] == 'A':nums[i] = 0elif s[i] == 'G':nums[i] = 1elif s[i] == 'C':nums[i] = 2elif s[i] == 'T':nums[i] = 3# 记录重复出现的哈希值seen = set()# 记录重复出现的字符串结果res = set()# 数字位数L = 10# 进制R = 4# 存储 R^(L - 1) 的结果RL = R ** (L - 1)# 维护滑动窗口中字符串的哈希值windowHash = 0# 滑动窗口代码框架,时间 O(N)left, right = 0, 0while right < len(nums):# 扩大窗口,移入字符,并维护窗口哈希值(在最低位添加数字)windowHash = R * windowHash + nums[right]right += 1# 当子串的长度达到要求if right - left == L:# 根据哈希值判断是否曾经出现过相同的子串if windowHash in seen:# 当前窗口中的子串是重复出现的res.add(s[left:right])else:# 当前窗口中的子串之前没有出现过,记下来seen.add(windowHash)# 缩小窗口,移出字符,并维护窗口哈希值(删除最高位数字)windowHash -= nums[left] * RLleft += 1# 转化成题目要求的 List 类型return list(res)

class StrStr:"""28. 找出字符串中第一个匹配项的下标https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/"""def solution(self, haystack: str, needle: str) -> int:# 文本串txt = haystack# 模式串pat = needle# 需要寻找的子串长度为模式串 pat 的长度L = len(pat)# 仅处理 ASCII 码字符串,可以理解为 256 进制的数字R = 256# 存储 R^(L - 1) 的结果RL = R ** (L - 1)# 维护滑动窗口中字符串的哈希值windowHash = 0# 计算模式串的哈希值patHash = 0for i in range(len(pat)):patHash = R * patHash + ord(pat[i])# 滑动窗口代码框架left, right = 0, 0while right < len(txt):# 扩大窗口,移入字符(在最低位添加数字)windowHash = R * windowHash + ord(txt[right])right += 1# 当子串的长度达到要求if right - left == L:# 根据哈希值判断窗口中的子串是否匹配模式串 patif patHash == windowHash:# 找到模式串print("找到模式串,起始索引为", left)return left# 缩小窗口,移出字符(删除最高位数字)windowHash = windowHash - ord(txt[left]) * RLleft += 1# 没有找到模式串return -1
http://www.lryc.cn/news/230178.html

相关文章:

  • 星宿UI2.51资源付费变现小程序 支持流量主广告投放
  • Telnet 测试 UDP 端口?
  • 【论文复现】常见问题
  • Uniapp开发 购物商城源码 在线电商商城源码 适配移动终端项目及各小程序
  • xml schema中的sequence的含义
  • 详解 KEIL C51 软件的使用·建立工程
  • 2023年03月 Python(五级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • nginx 代理服务时遇到的问题
  • 利用共享台球室小程序系统提升用户体验
  • U-Mail海外邮件中继帮您解决企业邮件退信难题
  • ImageJ灰度值量化分析 实用技巧——免疫组化分析(定量分析篇)
  • 了解STM32看门狗定时器的工作原理和原则
  • 【2014年数据结构真题】
  • PostgreSQL基本操作
  • hadoop 大数据环境配置 ssh免密登录 centos配置免密登录 hadoop(四)
  • Django 的国际化与本地化详解
  • Java19新增特性
  • [文件读取]metinfo_6.0.0 任意文件读取漏洞复现
  • [量化投资-学习笔记015]Python+TDengine从零开始搭建量化分析平台-量化知识点汇总
  • VSCode 好用的插件分享
  • C++虚基类详解
  • Mac M2/M3 芯片环境配置以及常用软件安装-前端
  • Karmada更高效地实现故障转移
  • 前端AJAX入门到实战,学习前端框架前必会的(ajax+node.js+webpack+git)(四)
  • ​TechSmith Camtasia 2024破解版功能介绍及使用教程
  • 【无线网络技术】——无线传输技术基础(学习笔记)
  • 【Liunx】部署WEB服务:Apache
  • 数字媒体技术基础之:常见图片文件格式
  • 2023-2024-2 高级语言程序设计-二维数组
  • 【uniapp】确认弹出框,选择确定和取消