算路:分治
- 假如我只有两个字符串需要进行比较,那么算法是简单的,只要按部就班逐位比较即可
 - 如果不分治,那么也不困难,不断得到
prefix和下一个进行比较就行 - 分治的关键在于把大规模的问题缩减成小规模。
 - 可以把字符串数组分成两部分,左边的公共前缀
left_prefix和右边的公共前缀right_prefix,那么只需要比较左右两边即可,利用递归可以实现。 - 算法里用了嵌套函数,可以看看。
 
代码:
class Solution:    # 分治算法实现    def longestCommonPrefix(self, strs: List[str]) -> str:        def lcp(begin_pos:int, end_pos:int)->str:            if end_pos == begin_pos:                return strs[begin_pos]            mid = (begin_pos + end_pos) // 2            # 此时已经得到了左右两部分别的公共前缀            left_prefix, right_prefix = lcp(begin_pos, mid), lcp(mid + 1, end_pos)            # 希望得到当前的公共前缀            min_len = min(len(left_prefix), len(right_prefix))            prefix_index = 0            for i in range(min_len + 1):                if i == min_len:                    prefix_index = min_len                else:                    if left_prefix[i] != right_prefix[i]:                        prefix_index = i                        break            return left_prefix[:prefix_index]        return lcp(0, len(strs) - 1)