Python3最长回文子串算法示例

作者:gxnustc 时间:2023-05-27 14:17:10 

本文实例讲述了Python3最长回文子串算法。分享给大家供大家参考,具体如下:

1. 暴力法

思路:对每一个子串判断是否回文


class Solution:
 def longestPalindrome(self, s):
   """
   :type s: str
   :rtype: str
   """
   if len(s) == 1:
     return s
   re = s[0]
   for i in range(0,len(s)-1):
     for j in range(i+1,len(s)):
       sta = i
       end = j
       flag = True
       while sta < end:
         if s[sta] != s[end]:
           flag = False
           break
         sta += 1
         end -= 1
       if flag and j-i+1 > len(re):
         re = s[i:j+1]
   return re

提交结果:超出时间限制

2. 动态规划法

思路:

m[i][j]标记从第i个字符到第j个字符构成的子串是否回文,若回文值为True,否则为False.

初始状态 s[i][i] == True,其余值为False.

当 s[i] == s[j]  and m[i+1][j-1] == True 时,m[i][j] = True


class Solution:
 def longestPalindrome(self, s):
   """
   :type s: str
   :rtype: str
   """
   k = len(s)
   matrix = [[False for i in range(k)] for j in range(k)]
   re = s[0:1]
   for i in range(k):
     for j in range(k):
       if i==j:
         matrix[i][j] = True
   for t in range(1,len(s)):       #分别考虑长度为2~len-1的子串(长串依赖短串的二维数组值)
     for i in range(k):
       j = i+t
       if j >= k:
         break
       if i+1 <= j-1 and matrix[i+1][j-1]==True and s[i] == s[j]:
         matrix[i][j] = True
         if t+1 > len(re):
           re = s[i:j+1]
       elif i+1 == j and j-1 == i and s[i] == s[j]:
         matrix[i][j] = True
         if t+1 > len(re):
           re = s[i:j+1]
   return re

执行用时:8612 ms

希望本文所述对大家Python程序设计有所帮助。

来源:https://blog.csdn.net/aawsdasd/article/details/80484938

标签:Python,回文,算法
0
投稿

猜你喜欢

  • 浅析Git版本控制器使用

    2023-09-10 16:21:23
  • 详解Python调用系统命令的六种方法

    2023-11-20 02:22:36
  • python logging添加filter教程

    2022-08-21 00:36:43
  • Vuex的安装、搭建及案例详解

    2024-05-29 22:20:22
  • asp实现本周的一周时间列表的代码

    2011-04-06 10:45:00
  • go语言中linkname的用法

    2024-02-07 10:48:39
  • python 算法 排序实现快速排序

    2022-09-04 03:20:17
  • pytorch常用函数之torch.randn()解读

    2023-03-24 09:08:29
  • 微信小程序request请求后台接口php的实例详解

    2023-11-11 14:24:04
  • 详解Django框架中用户的登录和退出的实现

    2022-08-28 19:37:19
  • python-docx文件定位读取过程(尝试替换)

    2022-03-05 14:41:19
  • Python原始字符串(raw strings)用法实例

    2021-05-04 18:29:27
  • Golang 限流器的使用和实现示例

    2024-04-25 15:06:25
  • python设置表格边框的具体方法

    2023-11-13 08:08:48
  • 微信小程序 云开发模糊查询实现解析

    2023-08-24 14:47:57
  • 简单方法实现Vue 无限滚动组件示例

    2023-07-02 16:50:14
  • 一个用Ajax做的用户名验证程序

    2007-10-21 20:40:00
  • golang中如何保证精度的方法

    2024-04-26 17:23:22
  • WEB设计经验-来自Microsoft

    2008-05-15 07:30:00
  • python标记语句块使用方法总结

    2023-09-23 20:16:22
  • asp之家 网络编程 m.aspxhome.com