设置检查函数,只要遍历到的新的arr元素和已经有的arr元素组成的set里没有重合,就可以继续把新的arr元素union进去。然后backtrack。出口是遍历到最后一个时。自然而然选定目前的元素,往后去尝试往里union。然后在最后return时,把开始被union的元素index往下+1.
class Solution:
def maxLength(self, arr: List[str]) -> int:
N = len(arr)
def nointersection(resset, arr_i):
return len(resset.union(arr_i)) == len(resset) + len(arr_i)
def backtrack(i, resset):
if i == N :return len(resset)
ans = 0
if nointersection(resset, arr[i]):
ans = backtrack(i+1, resset.union(arr[i]))
return max(ans, backtrack(i+1, resset))
return backtrack(0, set())