题目:
给出一个字符串数组,计算最长公共前缀。
举例:
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),只用到了一个临时变量。