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

数据结构-串

  • 什么是串?
  • 字符串匹配
    • BF算法

什么是串?

:即字符串(String),是由零个或多个字符组成的有限序列。

子串:字符串中任意个连续的字符组成的子序列称为该字符串的「子串」。

子串的位置:子串的第一个字符在主串中的位置。

主串:包含子串的串。

字符串的子串和子序列有什么区别?

  • 字符串的子串:必须是连续的一段
  • 字符串的子序列:可以不连续,但是相对次序不能乱

字符串匹配

字符串匹配:又称模式匹配,可以简单理解为,给定字符串 T 和 p,在主串 T 中寻找子串 p。主串 T 又被称为「文本串」,子串 p 又被称为「模式串」。

BF算法

BF算法:Brute-Force算法,又称蛮力算法。

基本思想:从主串和模式串的第一个字符开始比较,若相等,则继续比较两者的后续字符。否则从主串的第二个字符开始和模式串的第一个字符开始比较,重复上述过程,直到模式串的字符全部匹配完,则说明匹配成功。或主串中的字符全部比较完,则匹配失败。

在这里插入图片描述

  1. 什么时候退出循环?
    当主串或者模式串遍历完成时:i < mainChars.length && j < patternChars.length
  2. 如何计算出回溯时,主串的位置?
    i-j+1
  3. 如何判断匹配成功
    模式串的字符全部匹配完:j == patternChars.length
public static int firstIndex(String mainStr, String patternStr) {// 空值检查if (mainStr == null || patternStr == null) {return -1;}// 空模式串处理:空串是任意串的子串if (patternStr.length() == 0) {return 0;}char[] mainChars = mainStr.toCharArray();char[] patternChars = patternStr.toCharArray();// 主串的索引int i = 0;// 模式串的索引int j = 0;while (i < mainChars.length && j < patternChars.length) {if (mainChars[i] == patternChars[j]) {// 字符匹配成功,继续比较下一个字符i++;j++;}else {// 字符匹配失败,主串回退到上次匹配开始位置的下一个字符重新开始匹配i = i - j + 1;j = 0;}}if (j == patternChars.length) {// 匹配成功: 模式串的字符全部匹配完:j == patternChars.lengthreturn i - j;}return -1;
}

http://www.xdnf.cn/news/18817.html

相关文章:

  • 【微信小程序教程】第13节:用户授权与登录流程狼惫
  • ES03-常用API
  • 前端工程化与AI融合:构建智能化开发体系
  • 【git】P1 git 分布式管理系统简介
  • 开源 C++ QT Widget 开发(七)线程--多线程及通讯
  • 使用openCV(C ++ / Python)的Alpha混合
  • 安卓闪黑工具:aosp16版本Winscope之搜索功能剖析
  • GTCB:引领金融革命,打造数字经济时代标杆
  • 微生产力革命:AI解决生活小任务分享会
  • 欧盟《人工智能法案》生效一年主要实施进展概览(一)
  • MyBatis 之关联查询(一对一、一对多及多对多实现)
  • 解决VSCode中Cline插件的Git锁文件冲突问题
  • BiLSTM-Attention分类预测+SHAP分析+特征依赖图!深度学习可解释分析,Matlab代码实现
  • 【项目】分布式Json-RPC框架 - 抽象层与具象层实现
  • Elasticsearch中的协调节点
  • 人类记忆如何启发AI?LLM记忆机制综述解读
  • 软考-系统架构设计师 计算机系统基础知识详细讲解二
  • 人工智能之数学基础:离散型随机变量的概率分布有哪些?
  • 【大模型实战篇】基于开源视觉大模型封装多模态信息提取工具
  • 策略设计模式
  • Redis之Keys命令和Scan命令
  • 在python 代码中调用rust 源码库操作步骤
  • mysql优化-mysql索引下推
  • LeetCode - 946. 验证栈序列
  • Linux-孤儿进程和僵死进程
  • mysql是怎样运行的(梳理)
  • Python包管理与安装机制详解
  • EasyExcel 3.x 导出动态表头,动态sheet页
  • Rust:函数与控制流
  • 《Java反射与动态代理详解:从原理到实践》