题目:最长公共前缀

描述 给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。

数据范围: 0≤n≤5000, 0≤len(strs_i)≤5000 进阶:空间复杂度 O(n),时间复杂度 O(n)

思路:

解法一:横向比较,先比较前两个字符串的相同部分,存入result,result和下一个比,相同部分作为result,一直到最后一个

解法二:纵向比较,先将第一个字符串的第一个字母拿出来和数组其它字符串第一个比,相同存入result,再取下一个,再比相同再存,不同就返回result

解法三:只需要比较差别最大的两个字符串的前缀即可

# 解法三:
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param strs string字符串一维数组 
# @return string字符串
#
class Solution:
    def longestCommonPrefix(self , strs: List[str]) -> str:
        # write code here
        if len(strs) == 0:
            return ""
        elif len(strs) == 1:
            return strs[0]
        min_str = strs[0]
        max_str = strs[0]
        for i in strs:
            if i < min_str:
                min_str = i
            if i > max_str:
                max_str = i
        length_str = len(min_str)
        if length_str > len(max_str):
            length_str = len(max_str)
            min_str = min_str[:length_str]
        else :
            max_str = max_str[:length_str]
        if max_str == min_str:
            return min_str
        max_index = length_str
        min_index = 0
        mid_index = 0
        while max_index > min_index:
            mid_index = int((max_index + min_index)>>1)
            result = min_str[:mid_index]
            if max_str.startswith(result):
                min_index = mid_index + 1
            else :
                max_index = mid_index - 1
        result = min_str[:min_index]
        if max_str.startswith(result):
            return result
        else:
            return min_str[:min_index-1]

解法一:用jupyter nootbook写的,大概看一下

strs = ["abca","abc","abca","abc","abcc"]
result = strs[0]
for i in range(1,len(strs),1):
    j = 0
    while j < len(result):
        if (j >= len(strs[i]) or strs[i][j] != result[j]):
            result = result[0:j]
            break
        else:
            j += 1
print(result)

解法二:

strs = ["abca","abc","abca","abc","abcc"]
result = ''
finish = False
for index in range(len(strs[0])):
    i = strs[0][index]
    for j in strs:
        if(len(j)==index):
            finish = True
            break
        if j[index] != i:
            finish = True
            break
    if not finish:
        result += i
    else:
        break
print(result)