一、题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
二、思路解析
本篇博客我将会讲解这道题的两种解法👇
解法一:两两比较
这种方法的思路是从第一个字符串开始,逐个字符与其他字符串进行比较,直到找到最长公共前缀或者出现不匹配(在这道题指的是超出数组长度)的情况。
具体思路请看下图,方便大家理解:
编辑
解法二:统一比较
第二种解法则是使用一个辅助函数 findCommon
来寻找两个字符串的公共前缀,然后逐个对比所有字符串的公共前缀。
算法思路请看下图,其中 i 为遍历 strs[ 0 ] 的变量, j 为遍历 strs 的变量。
编辑
然后,我们首先取第一个字符串作为初始公共前缀 ret
,然后用 findCommon
函数找到当前字符串与 ret
的公共前缀,依次更新 ret
直到遍历完所有字符串。
三、完整代码
class Solution {
public String longestCommonPrefix(String[] strs) {
for(int i = 0; i < strs[0].length(); i++){
char tmp = strs[0].charAt(i);
for(int j = 0; j <strs.length; j++){
if(i == strs[j].length() || strs[j].charAt(i) != tmp){
return strs[0].substring(0, i);
}
}
}
return strs[0];
}
// // 解法一
// String ret = strs[0];
// for(int i = 0; i < strs.length; i++){
// ret = findCommon(strs[i], ret);
// }
// return ret;
// }
// public String findCommon(String s1, String s2){
// int i = 0;
// while(i < Math.min(s1.length(), s2.length()) && s1.charAt(i) == s2.charAt(i)){
// i++;
// }
// return s1.substring(0, i);
// }
}
以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!