5.22  如何求相对路径

5.22 如何求相对路径

【出自SLL笔试题】

难度系数:★★★☆☆ 被考察系数:★★★☆☆

题目描述:

编写一个函数,根据两个文件的绝对路径算出其相对路径。例如

a="/qihoo/app/a/b/c/d/new.c",b="/qihoo/app/1/2/test.c",那么b相对于a的相对路径是"../../../../1/2/test.c"

分析与解答:

首先找到两个字符串相同的路径(/aihoo/app),然后处理不同的目录结构(a="/a/b/c/d/new.c",b="/1/2/test.c")。处理方法为:对于a中的每一个目录结构,在b前面加“../”,对于本题而言,除了相同的目录前缀外,a还有四级目录a/b/c/d,因此只需要在b="/1/2/test.c"前面增加四个"../"得到的"../../../../1/2/test.c"就是b相对a的路径。实现代码如下:

978-7-111-61212-4-Part02-304.jpg

978-7-111-61212-4-Part02-305.jpg

程序的运行结果如下:

../../../../1/2/test.c

算法性能分析:

这种方法的时间复杂度与空间复杂度都为O(max(m,n))(其中,m和n分别为两个路径的长度)。