//编写一个函数来查找字符串数组中的最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。

分析:
这个题目方法很多,先用简单的方法来练练手、
因为是求最长公共前缀,所以我们只需要拿第一个字符串来逐一进行比较即可,拿第一个字符串的第一个字符与其他字符串的第一个字符相比较相等再继续比较第二个,如此重复下去,直到不相等或者和某一个字符串已经全部比较完了才停止循环。因为需要遍历字符串数组和遍历字符串中的字符,所以我们需要用到两个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(),保证在下标在这个范围内,就不会报错了
在这里插入图片描述

修改之后的代码,就可以正常输出了

在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值