1.题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
0 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
2.思路分析:
题目比较简短,也就很好理解
①当传入的数组长度为0或为null时,返回“”
在我做出来以后,看官方题解,发现我这个解法思路属于横向扫描的方式
②再去除了以上的条件以后,我们首先要获取传入数组里,字符串长度最小的那个数,因为最长公共前缀,肯定不会超过最短字符串的长度。
③通过最短字符串,与每一个字符遍历,获得字符匹配相同的个数。
3.代码实现:
class Solution {
public String longestCommonPrefix(String[] strs) {
// 最短字符串的小标
int index = 0;
// 传入的字符串长度
int length = strs.length;
// 最长公共前缀
String commonPrefix = "";
if (length == 0){
return "";
}
if (strs.length == 1) {
commonPrefix = strs[0];
return commonPrefix;
}
// 获取字符串数组中,位数最少的字符串
for (int i = 0; i < length; i++) {
if (strs[index].length() >= strs[i].length()) {
index = i;
}
}
String str = strs[index];
char[] chars = str.toCharArray();
// 最短字符串的长度
int minStringLength = chars.length;
if (minStringLength == 0){
return "";
}
int min = 0;
int balance = Integer.MAX_VALUE;
for (int i = 0; i < length; i++) {
char[] chars1 = strs[i].toCharArray();
int length1 = chars1.length;
for (int i1 = 0; i1 < minStringLength; i1++) {
if (chars[i1] == chars1[i1]) {
min += 1;
} else {
break;
}
}
if (balance >= min) {
balance = min;
}
min = 0;
if (balance == 0){
return "";
}
}
return str.substring(0,balance);
}
}