14. 最长公共前缀

本文介绍了如何使用Java解决LeetCode中的14题——最长公共前缀。通过比较字符串数组中每对字符串的公共部分,逐步确定最长公共前缀。代码中展示了两种解题思路,第一种是逐对比较并取最小公共长度,第二种是利用已有的公共长度进行优化。这两种方法都避免了不必要的遍历,提高了效率。
摘要由CSDN通过智能技术生成

力扣打卡:14. 最长公共前缀

解题思路

设定公共长度是第一个元素的长度

多利用已经计算过的结果来为新的计算服务
如:假设数组元素有多个

  • 第一个和第二个元素已经比较过
  • 那么第二个和第三个进行比较时,就受到了第一个和第二个元素比较结果的约束
  • Math.min(第二个和第三个元素的公共长度,第一个元素和第二个元素公共长度)
  • 在比较时,只需要找到最小的len即可,无需全部遍历

代码

class Solution {
    public String longestCommonPrefixA(String[] str) {
		String s = "";
		int min = Integer.MAX_VALUE;
        // 取第一个和每一个的公共长度,取最小值
        // 得到的最后就是最长的公共长度,注意转换关系
		for(int i=1;i<str.length;i++) {
			int len = judge(str[0],str[i]);
			min = min<len ? min : len ;
		}
        // 判断条件的写法
        // 第一个将一个长度的剔除,因为只有一个元素时,min也是MAX值,所以去除一个元素的情况
        // 剩下的就是0 和 正常情况了,此时只需要判断正常情况就可以了
		if(str.length==1)
			s = str[0];
		else if(min != Integer.MAX_VALUE) {
			s = str[0].substring(0, min);
		}
		return s;
	}
    // 创建一个函数取判断第一个和每一个之前的公共长度
    // 将0的长度包括在范围内
	public static int judge(String s1 , String s2) {
		int len = Math.min(s1.length(), s2.length());
		for(int i=0;i<len;i++) {
			if(s1.charAt(i)!=s2.charAt(i)) {
				len = i;
				break;
			}
		}
		return len;
    }
}

优化

// 思路:一直比较得到每一次的最小公共长度

public String longestCommonPrefix(String[] str) {
    int len = str[0].length();
    for(int i=1; i<str.length; i++){
        len = Math.min(len,judge(str[i-1],str[i],len));
        if(len==0) return "";
    }
    return str[0].substring(0,len);
}
public int judge(String s1, String s2, int len){
    int i=0;
    for(; i<s1.length() && i<s2.length() && i<len; i++){
        if(s1.charAt(i)!=s2.charAt(i)) {break;}
    }
    return Math.min(len,i);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值