难度等级:中等

题目描述:

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:

输入: "cbbd"
输出: "bb"

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

此题有多重解法,笔者作为小菜,目前只对自己想到的解法做说明:

1、回文子串的定义:字符串倒序和正序相等的字符串,即正着念和倒着念一样,如:上海自来水来自海上

2、笔者解法是遍历字符串每个字母,然后以每个字母为中心来判断两边的字符是否相等(分奇偶情况,奇数是字符完全在中间。偶数是字符属于中间2个中的左边那个)

更多方法可以参考这位力友做的分析,分析比较全面:https://leetcode-cn.com/problems/longest-palindromic-substring/solution/zui-chang-hui-wen-zi-chuan-by-leetcode/

解题代码:

class Solution:
def longestPalindrome(self, s: str) -> str:
longest_len = 0 # 最长回文子串长度
longest_str = '' # 最长回文子串
len_s = len(s)
for i, letter in enumerate(s):
str1 = ''
flag = 1
for j in range(0, i+1):
if i+1+j<len_s:
if s[i-j] == s[i+1 +j] and flag==1: # 偶对称
str1 = s[i-j] + str1 + s[i+1 +j]
current_len = len(str1)
if current_len > longest_len:
longest_len = current_len
longest_str = str1
else:
flag = 0
break str2 = letter
flag = 1
for j in range(1, i+1):
if i + j < len_s:
if s[i-j] == s[i+j] and flag==1: # 奇对称
str2 = s[i-j] + str2 + s[i+j]
current_len = len(str2)
if current_len > longest_len:
longest_len = current_len
longest_str = str2
else:
flag = 0
break
if not longest_str:
try:
longest_str = s[0] # 输入一个字符的情况
except:
longest_str = '' # 解决输入为空的情况
return longest_str

最新文章

  1. android appwigt
  2. SQL Server系统表sysobjects介绍与使用(转))
  3. ModernUI教程:处理内容导航事件
  4. 【转】ViewPager学习笔记(一)——懒加载
  5. linux命令学习-su
  6. 昂贵的聘礼---poj1062(最短路)
  7. SQL IO监控
  8. rf对时间控件的操作
  9. XJOI1559树转二叉树
  10. openstack-ocata-仪表盘服务6
  11. 【SpringMVC】&lt;context:include-filter&gt;和&lt;context:exclude-filter&gt;使用时要注意的地方
  12. .Net Core应用框架Util介绍(二)
  13. 【原创】Linux基础之sudo
  14. OpenCV trackbar 避免使用全局变量
  15. [No0000E4]C# 常量
  16. UI基础五:简单的OP组件POPUP搜索帮助
  17. Win10传递优化设置技巧
  18. AngularJS 脏检查机制
  19. C/C++控制Windows关机/注销/重启的正确姿势
  20. Tomcat Connector

热门文章

  1. log4j配置文件——hibernate
  2. 20200119日志 EPLAN高压房 VFD 单线图 心得
  3. bzoj 4008、4011、1499
  4. 二、JavaScript之点击按钮改变HTML样式 (CSS)
  5. JAVA程序中常用概念介绍
  6. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-flag
  7. linux项目,项目报错,排查
  8. 第十三篇Django Logging配置样例
  9. EUI库 - 9 - 数据集合 - 数组集合
  10. ng-repeat动态生成的DOM如何获取宽度(封装好的方法)