leetcode1405
Posted AsenYang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode1405相关的知识,希望对你有一定的参考价值。
在这三年时间中,做了不少的算法题目,leetcode也已经做到700题了,我觉得差不多了。
虽然和算法的大牛相比还有很大的差距,但对我自己的情况来说,已经算是达到了我的上限水平了。
我不想强求自己的算法能力再进一步提高了。感谢自己这三年的坚持,让我更有信心面对工作中的问题和挑战。
我想我应该抽出时间,对做过的题目,按照类别做一些复习,争取维持现在的算法水平,新的题目就随缘吧。
下面这道题是这周的周赛的一道中等难度的题目,这种题对我来说有点偏难,作为纪念性的第700题,我还是别自己费劲去弄了,参考一下高手的答案吧,哈哈哈。
第一种方案,使用堆:
1 from heapq import heappush, heappop 2 class Solution: 3 def longestDiverseString(self, a: int, b: int, c: int) -> str: 4 max_heap = [] 5 if a != 0: 6 heappush(max_heap, (-a, ‘a‘)) 7 if b != 0: 8 heappush(max_heap, (-b, ‘b‘)) 9 if c != 0: 10 heappush(max_heap, (-c, ‘c‘)) 11 s = [] 12 while max_heap: 13 first, char1 = heappop(max_heap) # char with most rest numbers 14 if len(s) >= 2 and s[-1] == s[-2] == char1: # check whether this char is the same with previous two 15 if not max_heap: # if there is no other choice, just return 16 return ‘‘.join(s) 17 second, char2 = heappop(max_heap) # char with second most rest numbers 18 s.append(char2) 19 second += 1 # count minus one, because the second here is negative, thus add 1 20 if second != 0: # only if there is rest number count, add it back to heap 21 heappush(max_heap, (second, char2)) 22 heappush(max_heap, (first, char1)) # also need to put this part back to heap 23 continue 24 25 # situation that this char can be directly added to answer 26 s.append(char1) 27 first += 1 28 if first != 0: 29 heappush(max_heap, (first, char1)) 30 return ‘‘.join(s) 31
第二种方案,使用递归:
1 class Solution(object): 2 def longestDiverseString(self, a, b, c, a_chr="a", b_chr="b", c_chr="c"): 3 if not (a <= b <= c): 4 data = sorted([(a, a_chr), (b, b_chr), (c, c_chr)]) 5 return self.longestDiverseString(data[0][0], data[1][0], data[2][0], data[0][1], data[1][1], data[2][1]) 6 if b == 0: 7 return c_chr * min(2, c) 8 if b == c: 9 return c_chr + b_chr + self.longestDiverseString(a, b - 1, c - 1, a_chr, b_chr, c_chr) 10 return c_chr * 2 + b_chr + self.longestDiverseString(a, b - 1, c - 2, a_chr, b_chr, c_chr)
参考:https://leetcode.com/problems/longest-happy-string/discuss/565488/Python-Simple-Recursion
以上是关于leetcode1405的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 1219. 黄金矿工 / 1748. 唯一元素的和 / 1405. 最长快乐字符串
leetcode_1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold_[二维前缀和](代码片段
片段无法加载到 View_pager tabLayout [重复]
LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段