首页 > 其他 > 详细

leetcode1405

时间:2020-04-06 10:13:44      阅读:62      评论:0      收藏:0      [点我收藏+]

第一种方案,使用堆:

 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         

参考:https://leetcode.com/problems/longest-happy-string/discuss/564248/Python-HEAP-solution-with-explanation

 

第二种方案,使用递归:

 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

原文:https://www.cnblogs.com/asenyang/p/12640547.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!