最长公共前缀。编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
1 |
|
示例 2:
1 |
|
说明:
所有输入只包含小写字母 a-z
。
思路一
以某个字符串为基准,对剩下的字符串一个字符一个字符的遍历,找寻最长公共前缀。时间复杂度$O(n)$,$n$ 为所有字符串的字符数之和。
1 |
|
思路二
假设某个字符串就是当前最长的公共前缀,然后遍历剩下的字符串,如果字符串中不包含当前的前缀,则当前前缀的长度减一。时间复杂度$O(n)$,$n$为所有字符串的字符数之和。
1 |
|
思路三
分治法。假设$LCP(strs)$表示$strs$的最长公共前缀,则有\(LCP(strs) = LCP(LCP(strs[:k]), LCP(strs[k+1:]))\)。所以可以将求$LCP(strs)$的问题分为求\(LCP(strs[:mid])\)和\(LCP(strs[mid+1:])\)两个子问题的过程。时间复杂度 $O(n)$,$n$ 为所有字符串的字符数之和。
1 |
|