题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串
""
。示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母
a-z
。
分析
(暴力枚举) O(n∗minLength)O(n∗minLength)
暴力枚举方法很简单:先找到所有字符串的最短长度minLength,然后从长度1到minLength依次枚举判断是否所有字符串的前缀是否都相等。
其余一些基于分治或Trie树等做法并不会优化到更好的时间复杂度。
Java实现
/**
* @ClassName:Solution
* @description:
* @Author: why
* @Date: 2019/4/20
*/
class Solution {
public String longestCommonPrefix(String[] strs) {
//如果有字符串数组长度是0,或空,那么不存在公共前缀
if (strs==null||strs.length==0){
return "";
}
//找到最短的字符串长度
int minLength=strs[0].length();
for (int i=0;i<strs.length;i++){
//如果有字符串长度是0,那么不存在公共前缀
if (strs[i].length()==0){
return "";
}
if (strs[i].length()<minLength){
minLength=strs[i].length();
}
}
for (int j=0;j<minLength;j++){
char c=strs[0].charAt(j);
for (int i=1;i<strs.length;i++){
if (strs[i].charAt(j)!=c){
return strs[0].substring(0,j);
}
}
}
return strs[0].substring(0,minLength);
}
}
测试
118 / 118 个通过测试用例 | 状态: 通过 |
执行用时:3 ms | 提交时间:3 分钟之前 |