高级农民
- 积分
- 1451
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-8-4
- 最后登录
- 1970-1-1
|
同面DIDI oa求助,能请教下楼主第三题具体思路吗,我只能想到一个效率很低的backtracking【捂脸】...
- class Solution():
- def FindLongestConcatenation(self, s_list):
- max_length = 0
- for i in range(len(s_list)):
- letter = set()
- visited = set()
- cur_s = self.dfs(s_list[i], s_list, letter, visited, "")
- max_length = max(max_length, len(cur_s))
- letter = set()
- visited = set()
- return max_length
- def dfs(self, s, s_list, letter, visited, concatenation):
- if len(visited) == len(s_list):
- return concatenation
- if s in visited:
- return concatenation
- for c in s:
- if c in letter:
- return concatenation
- letter.add(c)
- visited.add(s)
- concatenation += s
- max_length = len(concatenation)
- rtn = concatenation
- for next_s in s_list:
- if next_s == s or next_s in visited:
- continue
- cur_s = self.dfs(next_s, s_list, letter, visited, concatenation)
- if len(cur_s) > max_length:
- max_length = len(cur_s)
- rtn = cur_s
- visited.remove(s)
- for c in s:
- letter.remove(c)
- return rtn
复制代码 |
|