导航:首页 > 源码编译 > 算法几乎回文串

算法几乎回文串

发布时间:2025-01-01 04:53:33

1. 算法学习笔记(83): Manacher算法

Manacher算法,俗称马拉车,是一种专门处理回文子串问题的算法。回文串有奇偶两种形式:奇回文串和偶回文串。奇回文串相较于偶回文串更易处理,因其存在唯一的中心点。通过在原字符串两端添加一个不在字符集内的特殊字符,如空格或特定符号,可以将奇回文串转变成以普通字符为中心的奇回文串,而偶回文串则会变为以特殊字符为中心的奇回文串。

对于字符串S,定义一个数组P,表示以字符为中心的奇回文串的数量。在预处理后,P中的值对应原字符串中以特殊字符为中心的回文串。最长的回文子串长度是P中的最大值。

Manacher算法通过遍历字符串并维护中心点与边界点的位置,高效求解P数组。与Z算法类似,算法流程中,数组P值递增,内层循环执行次数不超过字符串长度,因此算法复杂度为线性。

2. 回文序列问题

Example 1:
Input: 121
Output: true
Example 2:
Input: -121
Output: false
Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.

示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
时间复杂度: O(n^2) 两个for循环
空间复杂度: O(n^2) dp数组的大小

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
示例 1:
输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]
思路:动态规划得到每个子串是否为回文子串,然后从头开始回溯算法
时间复杂度:O(N * 2^N)

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文。
返回符合要求的 最少分割次数 。
示例 1:
输入:s = "aab"
输出:1
解释:只需一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。
思路:

时间复杂度=空间复杂度=O(n^2)

给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。
回文字符串 是正着读和倒过来读一样的字符串。
子字符串 是字符串中的由连续字符组成的一个序列。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
示例 1:
输入:s = "abc"
输出:3
解释:三个回文子串: "a", "b", "c"

给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。
子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。
示例 1:
输入:s = "bbbab"
输出:4
解释:一个可能的最长回文子序列为 "bbbb" 。

给定一个字符串 S,找出 S 中不同的非空回文子序列个数,并返回该数字与 10^9 + 7 的模。
通过从 S 中删除 0 个或多个字符来获得子序列。
如果一个字符序列与它反转后的字符序列一致,那么它是回文字符序列。
如果对于某个 i,A_i != B_i,那么 A_1, A_2, ... 和 B_1, B_2, ... 这两个字符序列是不同的。
示例 1:
输入:
S = 'bccb'
输出:6
解释:
6 个不同的非空回文子字符序列分别为:'b', 'c', 'bb', 'cc', 'bcb', 'bccb'。
注意:'bcb' 虽然出现两次但仅计数一次。

阅读全文

与算法几乎回文串相关的资料

热点内容
服务器的灯如何设置 浏览:858
单片机控制门流程图 浏览:296
沪漂女程序员跳槽 浏览:302
百度石榴算法指的是 浏览:779
怎么将文件压缩得尽可能小 浏览:443
linux开发常用命令 浏览:829
我的世界java版如何进入服务器 浏览:897
如何把jpg转换pdf格式 浏览:290
华为p10plus图片加密 浏览:369
宏杰文件夹加密密码忘了 浏览:620
dos命令rd 浏览:667
怎么把wps上的算法格式改了 浏览:806
微信文件文件夹网盘 浏览:842
html5pdf教程 浏览:648
android聊天键盘 浏览:914
github拉取代码命令 浏览:38
8255a的初始化编程 浏览:390
资源机安卓未激活什么意思 浏览:998
飞利浦mp3没有文件夹 浏览:495
java程序员那些事儿 浏览:406