使用排序查找最长公共前缀的Java程序
问题陈述:给定一组字符串,找到最长的公共前缀。
例子:
Input: {"geeksforgeeks", "geeks", "geek", "geezer"}
Output: "gee"
Input: {"apple", "ape", "april"}
Output: "ap"
字符串数组的最长公共前缀是两个最不相似的字符串之间的公共前缀。例如,在给定的数组 {“apple”, “ape”, “zebra”} 中,没有公共前缀,因为数组“ape”和“zebra”的两个最不相似的字符串不共享任何起始字符。
我们在下面的帖子中讨论了五种不同的方法。
- 逐字匹配
- 字符字符
- 分而治之
- 二进制搜索。
- 使用特里)
在这篇文章中,我们讨论了一种基于排序的新方法。这个想法是对字符串数组进行排序,并找到排序数组的第一个和最后一个字符串的公共前缀。
Java
// Java program to find longest common prefix of
// given array of words.
import java.util.*;
public class GFG
{
public String longestCommonPrefix(String[] a)
{
int size = a.length;
/* if size is 0, return empty string */
if (size == 0)
return "";
if (size == 1)
return a[0];
/* sort the array of strings */
Arrays.sort(a);
/* find the minimum length from first and last string */
int end = Math.min(a[0].length(), a[size-1].length());
/* find the common prefix between the first and
last string */
int i = 0;
while (i < end && a[0].charAt(i) == a[size-1].charAt(i) )
i++;
String pre = a[0].substring(0, i);
return pre;
}
/* Driver Function to test other function */
public static void main(String[] args)
{
GFG gfg = new GFG();
String[] input = {"geeksforgeeks", "geeks", "geek", "geezer"};
System.out.println( "The longest Common Prefix is : " +
gfg.longestCommonPrefix(input));
}
}
输出:
The longest common prefix is : gee
时间复杂度: O(MAX * n * log n) 其中 n 是数组中的字符串数,MAX 是任何字符串中的最大字符数。请注意,两个字符串的比较最多需要 O(MAX) 时间,对于 n 个字符串的排序,我们需要 O(MAX * n * log n) 时间。
有关更多详细信息,请参阅有关使用排序的最长公共前缀的完整文章!