编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。
思路:
- 先利用Arrays.sort(strs)为数组排序;
- 再将数组第一个元素和最后一个元素的字符从前往后对比。
package algorithm;
import java.util.Arrays;
/**
* 最长公共前缀
* Leetcode: 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。
* <p>
* 示例 1:
* <p>
* 输入: ["flower","flow","flight"]
* 输出: "fl"
* Copy to clipboardErrorCopied
* 示例 2:
* <p>
* 输入: ["dog","racecar","car"]
* 输出: ""
* 解释: 输入不存在公共前缀。
*/
public class MaxCommonPrefix {
public static void main(String[] args) {
String[] strs = {"dog", "door", "didi"};
String maxCommonPrefix = getMaxCommonPrefix(strs);
System.out.println(maxCommonPrefix);
}
/**
* 获取最长公共前缀
*
* @param strs
*/
private static String getMaxCommonPrefix(String[] strs) {
if (checkStrs(strs)) {
int len = strs.length;
StringBuilder strbuilder = new StringBuilder();
Arrays.sort(strs);
int m = strs[0].length();
int n = strs[len - 1].length();
for (int i = 0; i < len; i++) {
if (strs[0].charAt(i) == strs[len - 1].charAt(i)) {
strbuilder.append(strs[0].charAt(i));
} else {
break;
}
}
return strbuilder.toString();
} else {
return "";
}
}
/**
* 检查字符串数组是否合法
*
* @param strs 原始字符串
* @return true 合法,false 不合法
*/
private static boolean checkStrs(String[] strs) {
boolean flag = false;
if (strs != null) {
for (int i = 0; i < strs.length; i++) {
if (strs[i] != null && strs[i].length() != 0) {
flag = true;
} else {
flag = false;
}
}
}
return flag;
}
}