Python程序员面试算法宝典---解题总结: 第5章 5.22 如何求相对路径

本文是Python程序员面试中关于算法的解题总结,聚焦于第5章的5.22节,主要探讨如何有效地计算文件系统的相对路径。通过实例解析,深入理解绝对路径与相对路径的转换,以及在编程中如何实现这一转换,为面试中的算法题提供解题思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- coding: utf-8 -*-

'''
Python程序员面试算法宝典---解题总结: 第5章 5.22 如何求相对路径

题目:
编写一个函数,根据两个文件的绝对路径计算出其相对路径。
例如
a="/qihoo/app/a/b/c/d/new.c",
b="/qihoo/app/1/2/test.c"
那么b相对于a的;就是
"../../../../1/2/test.c"

分析:
最简单的方式先找到两个路径的最长前缀公共路径
然后对路径a用/划分,划分得到的列表长度-1即为
'../'应该出现的次数,再拼接上b中除最长前缀
公共路径剩余的部分

关键:

参考:
Python程序员面试算法宝典
'''

"""
计算需要在相对路径前面添加的"../"
的个数,和字符串b剩余的内容
"""
def getRelatedNumAndRemainedStr(a, b):
    if not a or not b:
        return ""
    aList = a.split("/")
    bList = b.split("/")
    aLen = len(aList)
    bLen = len(bList)
    size = min(aLen, bLen)
    for i in range(size):
        if aList[i] != bList[i]:
            break
    # 接下来计算 "../"的个数,现在i表示的是第一次两者不同的位置,
    # 也是相同元素的个数
    relatedNum = aLen - i - 1
    remained = "/".join(bList[i:])
    return relatedNum, remained


def getRelatedPath(a, b):
    if not a or not b:
        return ""
    relatedNum, remained = getRelatedNumAndRemainedStr(a, b)
    related = ""
    for i in range(relatedNum):
        related += "../"
    result = related + remained
    return result


def process():
    a = "/qihoo/app/a/b/c/d/new.c"
    b = "/qihoo/app/1/2/test.c"
    result = getRelatedPath(a, b)
    print result


if __name__ == "__main__":
    process()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值