自己总结的三个思路,欢迎大家评论指错。
题目大意:小明在学旋律,每段旋律都可以用字符串来表示,并且旋律的每个字符的ASCALL码递增的
比如以下4段旋律 : aaa,bcd,bcdef,zzz
现在就是要求,小明能够吧这些旋律拼接起来组成最长的旋律。
比如上述例子输出 11 最长的旋律为 aaabcdefzzz
第一种解法:时间复杂度O(n^2),空间复杂度O(n),超时,可以通过50%
思路:先把字符串排序,定义一个长度为n的数组dp, dp[i]表示前i个字符串组成的最长旋律
num = ['aaa', 'bcd', 'zzz', 'bcdef', 'uvwz', 'bcdefvwzzzzzz', 'bbbb']
n = len(num)
num = sorted(num)
dp = [0 for _ in range(n)] # 动态数组
dp[0] = len(num[0])
for i in range(1, n): # 循环1到n
for j in range(i, -1, -1): # 循环i-1到0
if num[i][0] >= num[j][-1]: # 判断当前字符
dp[i] = max(len(num[i]) + dp[j], dp[i])
# print(len(num[i]))
# print(dp)
print(max(dp))
第二种解法:时间复杂度O(n*log(n)),空间复杂度O(1)
思路:先把字符串排序,