问答题 4.  编写一个函数,根据两个文件的绝对路径算出其相对路径。例如
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的路径。实现代码如下:
   def getRelativePath(path1,path2):
   if path1==None or path2==None:
   print "参数不合法\n"
   return
   relativePath=""
   #用来指向两个路径中不同目录的起始路径
   diff1=0
   diff2=0
   i=0
   j=0
   len1=len(path1)
   len2=len(path2)
   while i<len1 and j<len2:
   #如果目录相同, 那么往后遍历
   if list(path1)[i]==list(path2)[j]:
   if list(path1)[i]=='/':
   diff1=i
   diff2=j
   i+=1
   j+=1
   else:
   #不同的目录
   #把path1非公共部分的目录转换为"/
   diff1+=1 #跳过目录分隔符/
   while diff1<len1:
   #碰到下一级目录
   if list(path1)[diff1]=='/':
   relativePath+="../"
   diff1+=1
   #把path2的非公共部分的路径加到后面
   diff2+=1
   relativePath+=path2[diff2:]
   break
   return relativePath
   
   if __name__=="__main__":
   path1="/qihoo/app/a/b/c/d/new.c"
   path2="/qihoo/app/1/2/test.c"
   print getRelativePath(path1,path2)
   程序的运行结果为:
   ../../../../1/2/test.c
   算法性能分析:
   这种方法的时间复杂度与空间复杂度都为O(max(m,n))(其中,m、n分别为两个路径的长度)。
【答案解析】[考点] 如何求相对路径