编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。提示:
0 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法一 横向扫描法:
//横向扫描法
/*
* 思路:
* 首先取第一个作为基准,然后逐个字符对比后面的,更新index的值,不相同直接退出
* 最后根据index截取字符串即可
* */
public static String longestCommonPrefix(String[] strs) {
if(strs == null ||strs.length == 0){
return "";
}
int arrayLen = strs.length;
String str = strs[0];
for (int i = 1; i <arrayLen; i++) {
int minLen = Math.min(strs[i].length(),str.length());
int index = 0;
for (int j = 0; j < minLen; j++) {
if(str.charAt(j) == strs[i].charAt(j)){
index++;
}else
break;
}
str = str.substring(0,index);
if(str.length() == 0) break;
}
return str;
}
解法二 纵向扫描法
//纵向扫描法
/*
* 思路:
* 首先取第一个字符串的第一个字母,然后比较后面的字符串的第n个,直到找到不相同的那个
* 重新构建String即可
* */
public static String longestCommonPrefix(String[] strs) {
if(strs == null || strs.length <=0)
return "";
StringBuilder prefix = new StringBuilder();
int len = strs[0].length();
out:
for (int i = 0; i < len; i++) {
char nowChar = strs[0].charAt(i);
for (String s:strs) {
if(i>=s.length()||nowChar != s.charAt(i)){
break out;
}
}
prefix.append(nowChar);
}
return prefix.toString();
}
此处评论已关闭