编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
strs = [“flower”,“flow”,“flight”]
“fl”
public class Main{
public static void main(String[] args) {
//测试案例
String[] strings = new String[]{"flower", "flow", "flight"};
String res = longestCommonPrefix(strings);
//打印结果
System.out.println(res);//fl
}
public static String longestCommonPrefix(String[] strs) {
//横向遍历:遍历字符串数组中每一个字符串,不断更新最长公共前缀
String res = strs[0];//假定第一个字符串为最大前缀
for (int i = 1; i < strs.length; i++) {
//从第二个字符串开始比较
res = longestCommonPrefix(res, strs[i]);//调用求最长公共前缀函数(重载)
}
//返回最终结果
return res;
}
/**
* 求任意两个字符的最长公共前缀
*
* @param res 当前最长公共前缀
* @param compare 当前遍历到的数组中的某个字符串
* @return 返回两个字符串的最长前缀
*/
public static String longestCommonPrefix(String res, String compare) {
int len = Math.min(res.length(), compare.length());//计算两者之间较短的字符串长度
//目标索引
int index = 0;
for (int i = 0; i < len; i++) {
//index < len:防止数组越界
if (index < len && res.charAt(index) == compare.charAt(index)) {
index++;//当连续字符相同时,index开始计数
} else {
break;//当出现字符不相同时,则选择直接跳出循环
}
}
//返回切割后的字符串:就是当前两个字符串的最长前缀
return res.substring(0, index);
}
}