编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。
分析:
这个题目方法很多,先用简单的方法来练练手、
因为是求最长公共前缀,所以我们只需要拿第一个字符串来逐一进行比较即可,拿第一个字符串的第一个字符与其他字符串的第一个字符相比较相等再继续比较第二个,如此重复下去,直到不相等或者和某一个字符串已经全部比较完了才停止循环。因为需要遍历字符串数组和遍历字符串中的字符,所以我们需要用到两个for循环
(------我报错了的代码-----)
//编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。
class Solution {
public static String longestCommonPrefix(String[] strs) {
if(strs.length==0||strs==null) {//首先判断字符串数组是否有值,如果字符串为空,直接返回null
return null;
}
int length = strs[0].length();//定义第一个字符串的长度,用来做外层for循环的条件
int count = strs.length;//定义数组的个数,用来做内层for循环的语句
for(int i=0; i<length; i++) {//循环遍历第一个字符串中的字符,当i==length跳出循环时,说明第一个字符串就是最长公共前缀
char c = strs[0].charAt(i);//循环接收第一个字符串的各个字符
for(int j=1 ; j< count ; j++) {//遍历字符串数组中的每个字符串
//i等于strs[j].length(),说明已经遍历到其他字符串的末尾了,可以到这里终止了
//c!=strs[j].charAt(i),说明有不相等的字符,立即终止循环
if(c!=strs[j].charAt(i)||i==strs[j].length()) {
return strs[0].substring(0, i);//这里用substring(begin,end)方法来获取字符串的字串
}
}
}
return strs[0];
}
}
在这里我没有考虑清楚,犯了一个错误
当输入{“ab”,“a”}用例时,会报出下标超出
问题出在这里 当第一个字符串的长度大于某一个字符串(管它叫x)的长度时,当我们循环x的末尾时,再执行下一次循环时, 下表就已经超出界限了,此时我用c!=strs[j].charAt(i)来判断,就会找不到值, 所以就会报错。我们应该先判断i==strs[j].length(),保证在下标在这个范围内,就不会报错了
修改之后的代码,就可以正常输出了