题目:原题链接(中等)

标签:树、深度优先搜索

解法 时间复杂度 空间复杂度 执行用时
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