LeetCode Easy: 14. Longest Common Prefix
参考博客:http://blog.csdn.net/nxhyd/article/details/71566780
一、题目
Write a function to find the longest common prefix string amongst an array of strings.
找公共最大前缀
二、思路
这里提供两种思路,分别对应下面两组代码:
1、暴力方法;外循环,遍历整个字符串组,首先找到字符串数组中那个最短的字符串的长度(请注意这里并不是找最短字符串),内循环,相当于在最短字符串长度范围内(因为公共前缀的长度肯定不可能超过最短字符串的长度),循环遍历此长度范围内的每个子串的前缀。这个的复杂度简单计算下O(len(strs)*lenth)
2、首先(任意)选取第一个作为公共最大前缀字符串,然后循环遍历每个子串,按条件做长度减一操作。复杂度为O(len(strs))
三、代码如下:
#coding:utf-8
import time
def longestCommonPrefix(strs):
"""
:type strs: List[str]
:rtype: str
"""
if strs == []:
return ''
else:
for i in range(1, len(strs)):
l1 = len(strs[0])
l2 = len(strs[i])
if l1 > l2:
lenth = l2
else:
lenth = l1 #lenth表示的是字符串数组中最短的那个字符
strs[0] = strs[0][0:lenth] #表示公共前缀
for j in range(lenth):
if strs[0][j] != strs[i][j]:
strs[0] = strs[0][0:j]
break
print(strs[0])
return strs[0]
def longestCommonPrefix2(strs):
"""
:type strs: List[str]
:rtype: str
"""
if strs == []:
return ''
prefix = strs[0]
for i in range(1,len(strs)):
if not prefix:
return ''
else:
while prefix not in strs[i][:len(prefix)] and len(prefix)>0:
prefix = prefix[:len(prefix)-1]
return prefix
if __name__ == '__main__':
a = ['abc','abd','abcd']
starttime = time.clock()
#longestCommonPrefix2(a)
longestCommonPrefix2(a)
elapsed = (time.clock()-starttime)
print(elapsed)
print("this programe run %d ms"%(elapsed))
既然无论如何时间都会过去,为什么不选择做些有意义的事情呢
浙公网安备 33010602011771号