题目:原题链接(中等)
标签:树、深度优先搜索
解法 | 时间复杂度 | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O ( R ) O(R) O(R) | O ( R ) O(R) O(R) | 320ms (14.29%) |
Ans 2 (Python) | O ( R ) O(R) O(R) | O ( R ) O(R) O(R) | 268ms (88.10%) |
Ans 3 (Python) |
解法一(深度优先搜索):
class Solution:
def __init__(self):
self.hashmap = {}
self.ans = None
def findSmallestRegion(self, regions: List[List[str]], region1: str, region2: str) -> str:
for region in regions:
self.hashmap[region[0]] = region[1:]
self.dfs(regions[0][0], region1, region2)
return self.ans
def dfs(self, p, r1, r2):
find = 0
if p == r1 or p == r2:
find += 1
if p in self.hashmap:
find += sum(self.dfs(c, r1, r2) for c in self.hashmap[p])
if find == 2:
if not self.ans:
self.ans = p
return find
解法二(优化解法一):
class Solution:
def findSmallestRegion(self, regions: List[List[str]], region1: str, region2: str) -> str:
for region in reversed(regions):
if region1 in region:
region1 = region[0]
if region2 in region:
region2 = region[0]
if region1 == region2:
return region1