给你一个完整文件名组成的列表,请编写一个函数,返回他们的共同目录路径。
题目难度:中等
题目来源:codewars
def get_common_path(path: list):
pass
assert get_common_path(['/hogwarts/images/image1.png', '/hogwarts/images/image2.png']) == '/hogwarts/images/'
assert get_common_path(['/hogwarts/assets/style.css', '/hogwarts/scripts/app.js', 'home/setting.conf']) == ''
assert get_common_path(['/hogwarts/assets/style.css', '/.bin/mocha', '/read.md']) == '/'
def get_common_path(path: list):
# 用’/‘分割取出所有path的子路径
li = [path[i].split(’/’) for i in range(len(path))]
# 取最浅路径
le = min([len(i) for i in li])
# 比较所有的路径,存在相同的路径添加到com列表中
com = []
for i in range(le):
for j in range(len(li)-1):
flag = 0
if li[j][i] != li[j+1][i]:
flag = 1
break
if flag == 0:
com.append(li[j][i])
# 没有共同路径
if len(com) == 0:
return ''
# 仅有共同根路径
if len(com) == 1:
return '/'
return '/'.join(com) + '/'
def get_common_path(path: list=None):
"""
解题思路:对每个子路径,从0位开始比较的字符是否相同,相同则往后推,遇到不相同的字符则退出,
需要注意的是,比较的同时要记录"/"的位置slash_index,最后返回结果则是从0到slash_index位置的字符串
"""
index = 0
slash_index = 0
while True:
try:
item = [sub[index] for sub in path]
if len(set(item)) == 1:
index += 1
if list(set(item)) == ['/']:
slash_index = index
else:
break
except:
break
return path[0][:slash_index]