参考博客: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))