document.write('
首先找到两个字符串相同的路径(/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分别为两个路径的长度)。

 

');