题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例1:
1 | 输入: ["flower","flow","flight"] |
示例2:
1 | 输入: ["dog","racecar","car"] |
提示
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
解法
解法一:暴力破解
以整个str[0]作为公共字串,遍历剩下的字符串,如果在任一个余下字符串中找不到str[0]或者str[0]不是在字符串首部出现,则将str[0]长度减一,继续遍历匹配剩下的字符串。
Java
1 | public String longestCommonPrefix(String[] strs) { |
解法二:暴力破解2
和解法一不同,解法二是从str[0]的第一个字符开始,如果在剩下的字符串中匹配到了,再加入str[0]中第二个字符,继续遍历。
Java
1 | public String longestCommonPrefix(String[] strs) { |
解法三:分治法
将字符数组分作左半部分和右半部分,分别求出它们的最长公共前缀,再合并求它们的最长公共前缀。
Java
1 | public String longestCommonPrefix(String[] strs) { |
解法四:二分查找
利用二分查找逼近最长公共前缀的长度。对每个长度L,判断str[0].subString(0, L)是否是所有的字符串的公共前缀。
Java
1 | public String longestCommonPrefix(String[] strs) { |