连续最大和与判断回文
⭐️连续最大和⭐️
🔐题目详情
描述
一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3
输入描述:
输入为两行。 第一行一个整数 n(1 <= n <= 100000),表示一共有 n 个元素 第二行为 n 个数,即每个元素,每个整数都在 32 位 int 范围内。以空格分隔。
输出描述:
所有连续子数组中和最大的值。
示例 1
输入:
输出:
题目链接:连续最大和
💡解题思路
基本思路: 动态规划
解题思路:本题需要我们去求一段连续子序列的最大连续和,我们可以考虑动态规划,假设有一数组arr
,长度为n
,下标为i
。做动态规划题,有三个步骤:
状态定义
确定初始状态
确定状态转移方程
类似与数学推理,我们要相信,人可能会欺骗我,生活可能会欺骗我,但是数学永远不会欺骗我们,所以在下面进行推理的时候,只要你推理过程没有问题,要坚信你得到的推理表达式是正确的,如果你得到的状态转移方程有问题,你就要想想,你状态定义的是否为题目直接所求,你的初始状态是否正确,你的推理逻辑是否严密。
下面我们来进行推导:
状态定义: 我们定义表示以下标元素结尾的最大连续子序列和。确定初始状态: 当时,。转态转移方程:
遍历到下标的元素的时候,你有两种选择,一是在原来序列上加上这一个元素,此时的序列和为,另外的一种选择就是放弃之前的序列,从当前元素开始新的序列,此时序列和为,我们要选择哪一种呢?很明显,我们选择序列和更大的那一个,因此状态转移方程也就出来了。
再次回到我们的题目,题目让我们求最大连续子序列的和,我们状态转移方程求的是以i
下标元素结尾的连续子序列最大和,因此整个数组的连续子序列最大和,就是从i
下标元素结尾的最打连续子序列和中最大的那一个,即所求得f[n]
数组中最大的元素。
🔑源代码
🌱总结
本题为简单动态规划推理题,重点是要学会如何进行状态定义,如何确定初始状态值,如何推导状态转移方程。类似题:53. 最大子数组和509. 斐波那契数剑指 Offer 10- II. 青蛙跳台阶问题118. 杨辉三角119. 杨辉三角 II121. 买卖股票的最佳时机70. 爬楼梯1137. 第 N 个泰波那契数
⭐️判断回文⭐️
🔐题目详情
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串 A 和字符串 B。现在她非常好奇有没有办法将字符串 B 插入字符串 A 使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串 B 插入的位置不同就考虑为不一样的办法。例如:A = “aba”,B = “b”。这里有 4 种把 B 插入 A 的办法:* 在 A 的第一个字母之前: "baba" 不是回文* 在第一个字母‘a’之后: "abba" 是回文* 在字母‘b’之后: "abba" 是回文* 在第二个字母'a'之后 "abab" 不是回文所以满足条件的答案为 2
输入描述:
每组输入数据共两行。 第一行为字符串 A 第二行为字符串 B 字符串长度均小于 100 且只包含小写字母
输出描述:
输出一个数字,表示把字符串 B 插入字符串 A 之后构成一个回文串的方法数
示例 1
输入:
输出:
💡解题思路
基本思路: 模拟构造+判断回文解题思路:不妨设题目中的A
字符串为str1
,B
字符串为str2
,首先我们考虑每一个位置,str2
插入str1
指定位置构造字符串,然后判断这个构造的字符串是否回文即可,如果为回文字符串,计数器加1
即可。
对于判断回文,很简单,就是将字符串逆置,在于源字符串比较,如果相同,那这个字符串就是回文字符串。
🔑源代码
🌱总结
本题为字符串模拟题,基本思路就是构造str2
插入str1
字符串每一个位置情况的字符串,然后判断回文并计数即可。类似题:125. 验证回文串剑指 Offer II 027. 回文链表
版权声明: 本文为 InfoQ 作者【未见花闻】的原创文章。
原文链接:【http://xie.infoq.cn/article/ad7df97b482914aed507b9285】。文章转载请联系作者。
评论