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

【数据结构】子串、前缀

  1. 子串 (Substring)

    • 字符串中连续的一段字符序列,例如 "abc" 是 "abcd" 的子串。

    • 特点必须连续,顺序不可改变

  2. 子序列 (Subsequence)

    • 字符串中不连续但保持顺序的字符序列,例如 "acd" 是 "abcd" 的子序列。

  3. 前缀 (Prefix)

    • 字符串开头的子串,例如 "a""ab""abc" 都是 "abcde" 的前缀。

  4. 后缀 (Suffix)

    • 字符串结尾的子串,例如 "e""de""cde" 是 "abcde" 的后缀。

KMP 前缀函数(计算 next 数组)
#include <stdlib.h>
#include <string.h>int* compute_prefix_function(const char* pattern) {int n = strlen(pattern);int* next = (int*)malloc(n * sizeof(int));if (next == NULL) return NULL;int j = 0;next[0] = 0;for (int i = 1; i < n; i++) {while (j > 0 && pattern[i] != pattern[j]) {j = next[j - 1];}if (pattern[i] == pattern[j]) {j++;}next[i] = j;}return next; // 调用者需自行 free 释放内存
}// 示例用法:
// const char* pattern = "ababaca";
// int* next = compute_prefix_function(pattern);
// free(next);
滑动窗口(最长无重复子串)
int longest_unique_substring(const char* s) {int max_len = 0;int left = 0;int char_map[256]; // 假设字符为 ASCII 码memset(char_map, -1, sizeof(char_map)); // 初始化所有字符位置为 -1for (int right = 0; s[right] != '\0'; right++) {char c = s[right];if (char_map[c] >= left) {left = char_map[c] + 1;}char_map[c] = right;int current_len = right - left + 1;if (current_len > max_len) {max_len = current_len;}}return max_len;
}// 示例用法:
// const char* s = "abcabcbb";
// int result = longest_unique_substring(s);

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

相关文章:

  • 数据库索引详解:原理 · 类型 · 使用 · 优化
  • 傅利叶十周年,升级核心战略:“有温度”的具身智能蓝图
  • 【STM32 学习笔记】USART串口
  • ScaleTransition 是 Flutter 中的一个动画组件,用于实现缩放动画效果。
  • vscode_python远程调试_pathMappings配置说明
  • 一、数据仓库基石:核心理论、分层艺术与 ETL/ELT 之辨
  • Day21 奇异值分解(SVD)全面解析
  • 【Redis】缓存和分布式锁
  • spark-哈希join介绍
  • spring中的@Inject注解详情
  • 嵌入式学习笔记 - 运算放大器的共模抑制比
  • 探索C++内存管理
  • MySQL中like模糊查询如何优化?
  • JSON 在 Java 中的应用:手动生成与使用库的对比
  • 部署dify
  • 操作系统学习笔记第2章 (竟成)
  • 材料创新与工艺升级——猎板PCB引领高频阻抗板制造革命
  • 不同环境下运行脚本如何解决pythonpath问题
  • Cesium高度参考系统
  • Java大数据可视化在城市空气质量监测与污染溯源中的应用:GIS与实时数据流的技术融合
  • 宝蓝德中间件部署war包时,配置的绝对路径读取错误。
  • 《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互)-俄罗斯方块:用旋转矩阵打造经典
  • 质量、重力、引力、惯性 的本质,以及虫洞
  • 按键实现多个界面切换的方法
  • 从需求到用例的AI路径:准确率与挑战
  • PyQt5基础:QWidget类的全面解析与应用实践
  • LinkedList源码解析
  • stm32 lcd绘制波形和频谱
  • android HashMap和List该如何选择
  • Go多服务项目结构优化:为何每个服务单独设置internal目录?