题目:编写一个函数来查找字符串数组中最长公共前缀,如果不存在公共前缀,则返回空字符串。
/**
* 思路:1.依次比较数组中每个字符串相同索引位置处字符,记录索引位置,通过截取字符串的方式获取最长公共前缀;
* 如果i索引处出现不等值,则i索引之前的字符组成最长公共前缀;
* 如果直到i索引处都没有出现不等值,则i索引及其之前的字符组成最长公共前缀。
* 2.最长公共前缀长度 <= 数组中最短字符串的长度
*/
private static String longestCommonPrefix(String[] strs) {
int arrLen = strs.length;
// 获取数组中最短字符串长度
int minLen = strs[0].length();
for (int i = 1; i < arrLen; i++) {
int tempLen = strs[i].length();
if (tempLen < minLen) {
minLen = tempLen;
}
}
// 记录截取字符串结束位置索引
int endIndex = 0;
String fstStr = strs[0];
// 外层循环,循环最短字符串的长度
for1:for (int i = 0; i < minLen; i++) {
// 初始化数组索引
int j = 0;
// 截取字符串结束位置索引等于索引i+1
endIndex = i + 1;
// 内层循环,循环字符串数组的长度
while (++j < arrLen) {
// 依次比较字符串数组中每个字符串i索引位置字符
if (strs[j].charAt(i) != fstStr.charAt(i)) {
// 如果第i个字符不相等,则截取字符串结束位置索引减1
endIndex = endIndex - 1;
// 结束外层循环
break for1;
}
}
}
//String subSring = "abc".substring(0,2); //ab
// 截取字符串,得到最长公共前缀
return fstStr.substring(0, endIndex);
}