给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
示例 1:
输入: [2,3,-2,4]
输出:
6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
from typing import List
class Solution:
def maxProduct(self, nums: List[int]) -> int:
if len(nums) == 0:
return 0
length = len(nums)
dp = [[0] * 2 for _ in range(length)]
dp[0][0] = nums[0]
dp[0][1] = nums[0]
for i in range(1, length):
if nums[i] > 0:
dp[i][0] = min(nums[i], dp[i - 1][0] * nums[i])
dp[i][1] = max(nums[i], dp[i - 1][1] * nums[i])
else:
dp[i][0] = min(nums[i], dp[i - 1][1] * nums[i])
dp[i][1] = max(nums[i], dp[i - 1][0] * nums[i])
res = dp[0][1]
for i in range(1, length):
res = max(res, dp[i][1])
return res
if __name__ == '__main__':
s=Solution()
print(s.maxProduct([2,3,-2,4]))
2.任意多行字符串拆分数值求和【算法高阶】【字符串匹配】
编写程序,统计每行字符串中若干整数的和。每行字符串中整数间的分隔符可能有逗号“,”、分号“ ;”和空格,有多少行就求多少行。
输入格式:
任意输入若干行由整数构成的字符串(回车换行),整数间以逗号或空格或分号分隔。测试数确保至少有一行数据,字符串中的整数数据均合法有效。最后以一个回车结束输入。
输出格式:
对应输出原输入串(一行中的字符序列),冒号后输出各个整数之和。
输入样例:
1; 2 ,3
2 3; 4
10,20 30; 40
9
输出样例:
1; 2 ,3:6
2 3; 4:9
10,20 30; 40:100
stopword = ''
s = ''
print('请输入内容,输入空行回车结束输入:')
for line in iter(input, stopword):
s = s + line + "n"
print(s)
l = s.splitlines()
for num in range(0, len(l)):
one = l[num].replace(',', ' ').replace(';', ' ').split()
onesum = 0
for i in range(0, len(one)):
onesum = onesum + int(one[i])
print(l[num] + ":" + str(onesum))
3.最短回文串【字符串】【字符串匹配】
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。
示例 1:
输入:s = "aacecaaa"
输出:"aaacecaaa"
示例 2:
输入:s = "abcd"
输出:"dcbabcd"
提示:
0 <= s.length <= 5 * 104
s 仅由小写英文字母组成
class Solution:
def shortestPalindrome(self, s: str) -> str:
N = len(s)
idx1 = 0
for idx2 in range(N - 1, -1, -1):
if s[idx1] == s[idx2]:
idx1 += 1
if idx1 == N:
return s
return s[idx1:][::-1] + self.shortestPalindrome(s[:idx1]) + s[idx1:]
s=Solution()
print(s.shortestPalindrome('aabcdeef'))



