Algorithm之路十四:Longest Common Prefix

题目:

给出一个字符串数组,计算最长公共前缀。

举例:

abcdergd,abcgad,abfsgdrg,左边这三个是一个字符串数组的所有成员,他们的公共前缀是abc。

思路:

将字符串数组的第一个元素设置为公共前缀,然后利用java中indexOf找到公共前缀在其他字符中出现的位置,如果出现的位置不是0,那么就将公共前缀在尾部减去一个字符,继续重复操作。

代码:

public class Longest_Common_Prefix {

	public static String longestCommonPrefix(String[] strs)
	{
		if(strs.length == 0)
			return "";
		String prefix = strs[0];
		for(int i = 1;i < strs.length;i++)
		{
			while(strs[i].indexOf(prefix) != 0)
				prefix = prefix.substring(0,prefix.length() - 1);
		}
		return prefix;
    }
	public static void main(String[] args)
	{
		String[] strs = {"a"};
		System.out.println(longestCommonPrefix(strs));
	}
}


时间复杂度:

O(nm),n为字符串数组的元素个数,m为字符串数组中上一个元素比下一个元素多出的和strs[0]重合的前缀的字符个数的平均数。

这么说太绕了,举个例子,strs[0]  =  "abcdefg",strs[1] = "abcdghj“,strs[2] = "abcjkd",那么strs[1]和strs[0]公共前缀部分为“abcd”,strs[2]和strs[0]公共前缀为“abc”,那么“上一个元素比下一个元素多出的和strs[0]重合的前缀的字符个数”在此时就是1。

空间复杂度:

O(1),只用到了一个临时变量。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值