You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:45:03