没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
**
🍭
更多精彩内容,欢迎关注:公众号 / Github / LeetCode / 知乎 **
噔噔噔噔,这是公众号「噔噔噔噔,这是公众号「宫水三叶的刷宫水三叶的刷题题日日记记」的原」的原创专题创专题「回文串「回文串问题问题」合集。」合集。
本合集更新时间本合集更新时间为为 2021-10-07,大概每,大概每 2-4 周会集中更新一次。周会集中更新一次。关注公众号,后台回复「回文注公众号,后台回复「回文
串串问题问题」即可获取最新下」即可获取最新下载链载链接。接。
💡💡
下面介下面介绍绍使用本合集的最佳使用实使用本合集的最佳使用实践::
学学习习算法:算法:
1. 打开在线目录(Github 版 & Gitee 版);
2. 从侧边栏的类别目录找到「回文串问题」;
3. 按照「推荐指数」从大到小进行刷题,「推荐指数」相同,则按照「难度」从易到
难进行刷题‘
4. 拿到题号之后,回到本合集进行检索。
维维持熟持熟练练度:度:
1. 按照本合集「从上往下」进行刷题。
学学习习过程中遇到任何困过程中遇到任何困难难,欢迎加入「每日一,欢迎加入「每日一题题打卡打卡 QQ 群:群:703311589」」进进行交流行交流
🍭🍭🍭🍭🍭🍭
**
🍭
更多精彩内容,欢迎关注:公众号 / Github / LeetCode / 知乎 **
题题目描述目描述
这是 LeetCode 上的 5. 最长回文子串最长回文子串 ,难度为 中等中等。
Tag : 「模拟」、「回文串」
给你一个字符串 s,找到 s 中最长的回文子串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"
提示:
• 1 <= s.length <= 1000
• s 仅由数字和英文字母(大写和/或小写)组成
朴素解法朴素解法
这道题有一个很容易就能想到的简单做法:枚举字符串 s 中的每一位,作为回文串的中心点,
左右进行扩展,直到达到边界或者不满足回文串定义为止。
这样做的思路必然是正确的。
但很显然这是一个朴素(暴力)做法,那么我们如何确定这一做法是否可行呢?
还记得我们上一节的分析思路吗?当我们有了一个简单的实现方法之后,需要从题题目的数据目的数据规规
模模、计计算机的处理速度算机的处理速度和实实现现方法的方法的计计算量算量出发,判断这样的做法是否不会超时。
由于字符串长度最多只有 1000,而我们的实现方法是 O(n
2
),因此我们算法的计算量应该在
10
6
以内,是在计算机每秒的处理范围内的。
首先枚举回文串的中心 i,然后分两种情况向两边扩展边界,直到达到边界或者不满足回文串定
义为止:
• 回文串长度是奇数,则依次判断 s[i − k] == s[i + k], k = 1,2,3…
• 回文串长度是偶数,则依次判断 s[i − k] == s[i + k − 1], k = 1,2,3…
代码:
class Solution {
public String longestPalindrome(String s) {
String ans = "";
for (int i = 0; i < s.length(); i++) {
// 回文串为奇数
int l = i - 1, r = i + 1;
String sub = getString(s, l, r);
if (sub.length() > ans.length()) ans = sub;
// 回文串为偶数
l = i - 1;
r = i + 1 - 1;
sub = getString(s, l, r);
if (sub.length() > ans.length()) ans = sub;
}
return ans;
}
String getString(String s, int l, int r) {
while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
l--;
r++;
}
return s.substring(l + 1, r);
}
}
• 时间复杂度:先枚举了 s 中的每个字符作为回文串的中心点,再从中心点出发左
右扩展,最多扩展到边界。复杂度是 O(n
2
)
• 空间复杂度:O(1)
Manacher 算法算法
这是一个比较冷门的算法,使用范围也比较单一,只能用于解决「回文串」问题。
Manacher 确实是「回文串」问题的最优解。
但事实上我还没有见过必须使用 Manacher 算法才能过的回文串题。
剩余19页未读,继续阅读
韩金虎
- 粉丝: 28
- 资源: 285
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0