Python如何合并斜杠分隔的重叠字符串对象集合?
合并重叠路径段的实现方案
你原来的代码问题出在单次迭代只能合并两段,且修改集合的同时遍历组合会导致数据状态混乱,我们可以用邻接链的思路实现稳定合并,完全不受输入顺序影响,也能正确处理独立字符串:
实现思路
- 把所有路径段拆成相邻节点对,分别记录每个节点的前驱和后继
- 由于输入不存在分支和循环,每个连通的节点必然组成一条单链
- 找到所有链的起点(没有前驱的节点),从起点遍历到链尾拼接即可得到合并后的完整路径
完整代码
def merge_paths(path_set): next_map = dict() # 存储节点的后继节点 prev_map = dict() # 存储节点的前驱节点 all_nodes = set() # 遍历所有输入路径,构建前后继关系 for path in path_set: parts = path.split('/') all_nodes.update(parts) for i in range(len(parts)-1): cur, next_node = parts[i], parts[i+1] next_map[cur] = next_node prev_map[next_node] = cur result = set() # 找所有链的起点:没有前驱的节点 for node in all_nodes: if node not in prev_map: # 从起点开始拼接完整路径 current = node path_parts = [current] while current in next_map: current = next_map[current] path_parts.append(current) result.add('/'.join(path_parts)) return result # 测试用例1 example1 = {'A/B', 'B/C', 'C/D', 'D/E','U/V', 'V/W','X/Y'} print(merge_paths(example1)) # 输出:{'A/B/C/D/E', 'U/V/W', 'X/Y'} # 测试用例2(包含独立字符串) example2 = {'A/B', 'B/C', 'C/D', 'D/E','U/V', 'V/W','X/Y','Z'} print(merge_paths(example2)) # 输出:{'A/B/C/D/E', 'U/V/W', 'X/Y', 'Z'}
这个实现不管输入顺序怎么打乱,输出结果都是一致的,也支持输入中已经存在的多段路径(比如输入包含A/B/C也能正确合并后续的C/D)。
内容的提问来源于stack exchange,提问作者rawtoine
相关产品推荐
相关产品推荐

