【leetcode】1257. Smallest Common Region
题目如下:
You are given some lists of
regionswhere the first region of each list includes all other regions in that list.Naturally, if a region
Xcontains another regionYthenXis bigger thanY.Given two regions
region1,region2, find out the smallest region that contains both of them.If you are given regions
r1,r2andr3such thatr1includesr3, it is guaranteed there is nor2such thatr2includesr3.
It's guaranteed the smallest region exists.Example 1:
Input: regions = [["Earth","North America","South America"], ["North America","United States","Canada"], ["United States","New York","Boston"], ["Canada","Ontario","Quebec"], ["South America","Brazil"]], region1 = "Quebec", region2 = "New York" Output: "North America"Constraints:
2 <= regions.length <= 10^4region1 != region2- All strings consist of English letters and spaces with at most 20 letters.
解题思路:首先递归找出region1所属的regions链,并保持结果;然后再递归查找region2所属的regions链,找到第一个region在region1所属的regions链即可。
代码如下:
class Solution(object): def findSmallestRegion(self, regions, region1, region2): """ :type regions: List[List[str]] :type region1: str :type region2: str :rtype: str """ dic = {} for region in regions: parent = region[0] for i in range(1,len(region)): dic[region[i]] = parent dic_region1 = {} while region1 in dic: dic_region1[region1] = 1 region1 = dic[region1] while region2 in dic: if region2 in dic_region1: return region2 region2 = dic[region2] return regions[0][0]
浙公网安备 33010602011771号