当前位置:网站首页>PAT甲级:1040 Longest Symmetric String
PAT甲级:1040 Longest Symmetric String
2022-08-04 13:06:00 【正在黑化的KS】
题目描述:
Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, given
Is PAT&TAP symmetric?, the longest symmetric sub-string iss PAT&TAP s, hence you must output11.Input Specification:
Each input file contains one test case which gives a non-empty string of length no more than 1000.
Output Specification:
For each test case, simply print the maximum length in a line.
Sample Input:
Is PAT&TAP symmetric?Sample Output:
11代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
题目大意:
给定一个字符串 求最长回文子串的长度
解题思路:
最长回文子串
dp[i][j] 表示 s[i] 至 s[j]如果是回文子串则为1, 反之则为0
1. s[i]==s[j] 那么只需要 s[i+1], s[j-1]是回文子串, s[i]至s[j] 就是回文子串: dp[i][j] = dp[i+1][j-1]2. s[i]!=s[j]:
dp[i][j] = 0 s[i]至s[j]不是回文子串
根据从边界出发的原理, 注意到边界都是长度为1或2的子串, 每次转移都对子串的长度-1, dp[i][j] = dp[i+1][j-1]不妨考虑按子串的长度和子串的初始位置进行枚举
Python3代码:
s = input()
length = len(s)
dp = [[0]*(length+10) for i in range(length+10)]
res = ''
for l in range(1,length+1) :
i = 0
while i + l - 1 < length :
j = i + l - 1
if l == 1 : dp[i][j] = 1
elif l == 2 and s[i] == s[j] : dp[i][j] = 2
else :
if s[i] == s[j] and dp[i+1][j-1] : dp[i][j] = dp[i+1][j-1] + 2
if dp[i][j] > len(res) : res = s[i:j+1]
i += 1
print(len(res))边栏推荐
猜你喜欢
随机推荐
yum 查看已经安装过的包并卸载
router---模式
PMP每日一练 | 考试不迷路-8.4(包含敏捷+多选)
高手,云集在于REST、gRPC 和 GraphQL之间!
广告电商系统开发之订单处理
Geoffrey Hinton:深度学习的下一个大事件
新 Nsight Graph、Nsight Aftermath 版本中的性能提升和增强功能
Django使用腾讯云发送短信并存入redis
k8s上安装mysql
论文翻译:2022_Time-Frequency Attention for Monaural Speech Enhancement
JSX use
跨链桥已成行业最大安全隐患 为什么和怎么办
How to stress the MySQL performance indicators TPS\QPS\IOPS?
项目里的各种配置,你都了解吗?
“蔚来杯“2022牛客暑期多校训练营5 B、C、F、G、H、K
The head module of the yolo series
Various problems with npm install
Is the code more messy?That's because you don't use Chain of Responsibility!
LeetCode_643_子数组的最大平均数Ⅰ
工具函数---字符串处理









