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

C双指针滑动窗口算法

这也许是双指针技巧的最⾼境界了,如果掌握了此算法,可以解决⼀⼤类⼦字符串匹配的问题

原理

1、我们在字符串 S 中使⽤双指针中的左右指针技巧,初始化 left = right = 0,把索引闭区间 [left, right] 称为⼀个「窗⼝」。

2、我们先不断地增加 right 指针扩⼤窗⼝ [left, right],直到窗⼝中的字符串 符合要求(包含了 T 中的所有字符)。

3、此时,我们停⽌增加 right,转⽽不断增加 left 指针缩⼩窗⼝ [left, right],直到窗⼝中的字符串不再符合要求(不包含 T 中的所有字符了)。 同时,每次增加 left,我们都要更新⼀轮结果。

4、重复第 2 和第 3 步,直到 right 到达字符串 S 的尽头。

代码
#include <stdio.h>const char* matchString(const char* content, const char* sub) {// 数据初始化size_t size = strlen(content);size_t sub_size = strlen(sub);int flag[256] = {0};		// 字符数统计// 搜索区间const char* begin = content;const char* end = content + size;// 双指针动态滑动窗口const char* _left = begin;const char* right = begin;// 滑动匹配for(;right < end; ++right) {++flag[*right];	// 窗口内字符数统计// 缩小窗口,寻找可行解int i = 0;for(; i < sub_size;) {if(right - _left < sub_size)break;	// 窗口失效if(!flag[*(sub + i)])break; // 窗口失效if(*(_left + i) != *(sub + i)) {--flag[*(_left + i)]; // 窗口内字符数更新++_left;i= 0;continue;	// 缩小窗口,重新匹配}++i;}if(i == sub_size)return _left;  // 查找成功}return end;	// 查找失败
}int main () {printf("%s\n", matchString("abccbaaabcbaabcacbacb", "acb"));return 0;
}
输出
acbacb
问题

找到字符串中所有字⺟异位词?

⽆重复字符的最⻓⼦串? 


创作不易,小小的支持一下吧!

http://www.lryc.cn/news/399847.html

相关文章:

  • WPF学习(6) -- WPF命令和通知
  • 升级到LVGL9的一些变化(后续发现再补充)
  • 当在多线程环境中使用 C++进行编程时,怎样确保线程安全以及如何处理线程之间的同步和通信?
  • 博物馆地图导航系统:高精度地图引擎与AR/VR融合,实现博物馆数字化转型
  • liunx作业笔记1
  • 大话C语言:第31篇 指针和数组的关系
  • Mysql-索引应用
  • Facebook 开源计算机视觉 (CV) 和 增强现实 (AR) 框架 Ocean
  • 【接口自动化_13课_接口自动化总结】
  • 安防管理平台LntonCVS视频汇聚融合云平台智慧火电厂安全生产管理应用方案
  • 【Web性能优化】在Vue项目中使用defer优化白屏,秒加载!
  • springboot上传图片
  • python入门:python及PyCharm安装
  • 链接追踪系列-04.linux服务器docker安装elk
  • 深入探讨微服务架构设计模式与常见实践
  • 【java】合并数组的两种方法
  • [图解]分析模式-01-概述1
  • 【网络安全】Oracle:SSRF获取元数据
  • Android Bitmap
  • 2024 年全国青少年信息素养大赛 Python 小学组复赛真题
  • C语言——流程控制:if...else、switch...case
  • 小白的OS Copilot 产品测评
  • 使用Scikit-Learn决策树:分类问题解决方案指南
  • E12.【C语言】练习:求两个数的最大公约数
  • Elasticsearch:介绍 retrievers - 搜索一切事物
  • 全面升级的对象创建——抽象工厂模式(Python实现和JAVA实现)
  • 谷粒商城实战笔记-29~34-前端基础 - ES6
  • 浔川官方撤销浔川总社部社长王*职位——浔川官方
  • 小白学python(第七天)
  • npm和yarn清理缓存命令