动态规划—回文子串的问题

回文字串问题

516. 最长回文子序列

给定一个字符串s 找到其中最长的回文子序列 可以假设s的最大长度为1000 (注意这里的回文子序列不一定是连续的)

n = len(s)
dp = [[0] for _ in range(n)] for _ in range(n)] # dp[i][j] 表示第i个到第j个字符间的子序列的个数(i < j)
for i in range(n):
	dp[i][i] = 1
# 对于任意字符串 如果头尾字符相同 那么字符串的最长子序列等于去掉首尾的字符串的最长子序列加上首尾
# 如果首尾字符不同 则最长子序列等于去掉头的字符串的最长子序列和去掉尾的字符串的最长子序列的较大者
for j in range(1, n):
	for i in range(j - 1, -1, -1):
		if s[i] == s[j]:
			dp[i][j] = 2 + dp[i + 1][j - 1]
		else:
			dp[i][j] = max(dp[i + 1][j], dp[i][j - 1])
return dp[0][n - 1]

5. 最长回文字串

描述:给定一个字符串s 找到s中最长的回文字串(这里的回文串是连续的) 你可以假设s的最大长度为1000

k = len(s)
matrix = [[0] for i in range(k)] for i in range(k)] # matrix[i, j] 表示s[i:j]字串是否是回文串
longestSubStr = ""
logestLen = 0
for j in range(0, k):
	for i in range(0, j + 1):
		if j - i <= 1: # 当j - i <= 1时 如果s[i] == s[j] 则表示是s[i:j]为回文字串 matrix[i][j] 为true 否则matrix[i][j] = false
			if s[i] == s[j]:
				matrix[i][j] = 1
				if logestLen < j - i + 1:
					logestSubStr = s[i:j + 1]
					logestLen = j - i + 1
		else:
			if s[i] == s[j] and matrix[i+1][j-1]: # 当j - i > 1时  则判断s[i] s[j]是否相等以及matrix[i + 1][j - 1]是否为true        即s[i + 1: j + 1]是否是回文串 如果为真 matrix[i][j]=true
				matrix[i][j] = 1
				if logestLen < j - i + 1:
					logestSubStr = s[i: j + 1]
					logestLen = j - i + 1
			return logestSubStr

647. 回文字串

n = len(s)
if n == 0:
	return 0
dp = [1 for i in range(n)]
for i in range(n):
	for j in range(i + 1, n):
		if s[j] == s[i] and s[i: j + 1] == s[i: j+1][::-1]:
			dp[i] += 1
return sum(dp)

34. 在排序数组中查找元素的第一个和最后一个位置

描述:给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

sorted_nums = nums[: : -1]
if target in nums:
	start = nums.index(target)
	end = len(nums) - sort_nums.index(target) - 1
	return [start, end]
else:
return [-1, -*1]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值