给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
示例 1:
输入: [2,3,-2,4]
输出:
6
解释: 子数组 [2,3] 有最大乘积 6。
示例 2:
输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
from typing import Listclass 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 resif __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'))