C++前后缀分解

相关知识点

C++算法与数据结构
打开打包代码的方法兼述单元测试

这个算法很容易想到,学习了本文后,可以更快得想到。

前后缀分解

分治法的一种,将数组和字符串,拆分成前缀和后缀。字符串(数组)的前缀是字符串的前i个元素:s.substr(0,i-1),即s0 ... \dots ... si-1。同理后缀就是字符串s的后几个元素(字符)。

不失一般型,我们以字符串s="abcde"为例,s有5种拆分方法:

"" "abcde"
"a" "bcde"
"ab" "cde"
"abc" "de"
"abcd" "e"
"abcde" ""

如果字符串的长度为n,则共有n+1中划分法,前缀长度分别为:i ∈ \in ∈0,n,后缀长度分别为n-i。

一般分三步:

一,预处理前缀。

二,预处理后缀。

三,枚举前后缀的拆分方法。

取走水果

条桌上有若干梨和苹果,求最少取走多少水果,才能没有苹果在梨左边。我们将水果分成左(前缀)、右(后缀)两部分,前缀只有梨,取走所有苹果;后缀只有苹果,取走所有梨。分别枚举前缀的长度。如下图,初始梨苹果梨苹果梨,各划分方案:红色竖线之前是梨,红色竖线之后是苹果:

转置字符串(数组)

将字符串s前后颠倒就是转置字符串revs,两者长度相等:

cpp 复制代码
revs[i] = s [n-1-i]

字符串的前缀(后缀)就是转置字符串的后缀(前缀),顺序相反 。如:"abcde"长度为3的前缀是:abc de,转置字符串长度为3的后缀是:edcba 。许多时候和顺序无关,可以直接使用,如:子数组最大和、是否存在指定和的子数组、指定元素的数量。如果和顺序有关,则需要转换,比如:升序变成降序,起点变成终点。

二维数组处理起来麻烦,可以降维为一维数组后再处理。

相关题解

部分题解已经完成,逐步发布中。

难度分
【C++前后缀分解】1031. 两个非重叠子数组的最大和 1680
【C++前缀和】2420. 找到所有好下标 1695
【C++前后缀分解 动态规划】2100. 适合野炊的日子 1702
【C++二分查找 】1477. 找两个和为目标值且不重叠的子数组 1850
【C++前后缀分解】1653. 使字符串平衡的最少删除次数 1793
【二分算法】1671:得到山形数组的最少删除次数 1912
【C++前后缀分解】1888. 使二进制字符串字符交替的最少反转次数 2005
【C++前后缀分解 降维】2906. 构造乘积矩阵 2074
【动态规划】【字符串】2167移除所有载有违禁货物车厢所需的最少时间 2219
【C++前后缀分解】2484. 统计回文子序列数目 2223
【堆 优先队列】2163. 删除元素后和的最小差值 2225
【二分查找】【双指针】LeetCode:2565最少得分子序列 2432
【动态规划】【滑动窗口】C++算法:3003 执行操作后的最大分割数量 3039

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17

或者 操作系统:win10 开发环境: VS2022 C++17

如无特殊说明,本算法用**C++**实现。

相关推荐
chase_my_dream5 小时前
2D-SLAM 真实数据处理与多传感器工程落地:时间同步、异常过滤、标定对齐和系统调试
c++·人工智能·2d-slam
水龙吟啸5 小时前
华为2026.6.17机考选择题+编程题【速刷敲黑板】
人工智能·深度学习·算法·华为
凌波粒6 小时前
LeetCode--53. 最大子序和(贪心算法)
算法·leetcode·贪心算法
Hesionberger6 小时前
快速求解完全平方数的最少数量
开发语言·数据结构·python·算法·leetcode·c#
c238566 小时前
《序列 DP:C++ 中的“最长”套路与编辑距离》
c++·算法·动态规划
aqiu1111116 小时前
【算法日记 19】LeetCode 1. 两数之和:梦开始的地方,哈希表的降维打击
算法·leetcode·职场和发展
鱼子星_6 小时前
【C++】类和对象(下)——初始化列表,类型转换,static成员,友元,内部类,匿名对象,编译器的优化拓展
c语言·c++·笔记
王老师青少年编程14 小时前
2025年【江苏“信息与未来”编程思维】真题及题解(T2:坐标变换)
c++·题解·真题·坐标变换·编程思维·江苏·信息与未来
CS创新实验室15 小时前
算法、齿轮与硅基大脑:数值计算发展简史
人工智能·算法·数值计算
海石17 小时前
1563分的简单题,可能就简单在能被暴力AC
算法·leetcode