JAVA:
package com.leetcode;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* 编写一个函数来查找字符串数组中的最长公共前缀。
*
* 如果不存在公共前缀,返回空字符串 ""。
*
*
*
* 示例 1:
*
* 输入:strs = ["flower","flow","flight"] 输出:"fl"
*
* 示例 2:
*
* 输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
*
*
*
* 提示:
*
* 1 <= strs.length <= 200 0 <= strs[i].length <= 200 strs[i] 仅由小写英文字母组成
*
* 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/longest-common-prefix
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
*
* @description:
* @author:1252319301
* @version:
* @date: 2022年5月11日
*/
public class Hot014_LongestCommonPrefix {
// -----------------------------------Solution1:横向扫描----------------------------------
/*
* 用 LCP(S1…Sn)表示字符串 S1…SnS_1的最长公共前缀。 可以得到以下结论:
* LCP(S1…Sn)=LCP(LCP(LCP(S1,S2),S3),…Sn)
*
* 复杂度分析
*
* 时间复杂度:O(mn),其中 m 是字符串数组中的字符串的平均长度,n是字符串的数量。 最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。
*
* 空间复杂度:O(1)。使用的额外空间复杂度为常数。
*/
/**
* @description: 求数组中的 最大公共前缀
* @date:2022年5月11日
* @param strs
* @return 前缀
*/
public String longestCommonPrefix(String[] strs) {
// CHECK parameter
if (strs == null || strs.length == 0)
return "";
// ToLowerCase 因为题意仅由小写英文字母组成 , 可省略
List<String> list = Arrays.stream(strs).map(String::toLowerCase).collect(Collectors.toList());
strs = list.toArray(new String[list.size()]);
// System.out.println(Arrays.toString(strs));
// 设第一个字符串是最大公共前缀
String prefix = strs[0];
for (int i = 1; i < strs.length; i++) {
// 公共前缀
prefix = longestCommonPrefix(prefix, strs[i]);
if (prefix.length() == 0) {
break;
}
}
return prefix;
}
/**
*