最长公共前缀:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
/**
@author cosefy
@date 2020/6/15
*/
public class LongestCommonProfix {
public static void main(String[] args) {
String[] strs = {"flower", "flow", "flight"};
String s1 = test1(strs);
String s2 = test2(strs);
System.out.println("最长公共前缀是:" + s1);
System.out.println("最长公共前缀是:" + s2);
}
解法一:依次比较每个字符串的字符,得到公共字符
思路:采用双重循环,依次比较每个字符串的字符。
分析:时间效率较低。
public static String test1(String[] strs) {
StringBuffer s = new StringBuffer();
boolean flag = true;
if (strs.length == 0)
return s.toString();
if (strs.length == 1)
return strs[0];
for (int i = 0; i < minSzie(strs); i++) { //第一层循环是每个字符串的第i个元素
char temp = strs[0].charAt(i);
for (int j = 1; j < strs.length; j++) { //第二层循环表示第j个字符串
if (temp == strs[j].charAt(i))
continue;
else {
flag = false;
break;
}
}
if (flag) {
s = s.append(temp);
} else
break;
}
return s.toString();
}
private static int minSzie(String[] strings) { //函数用来得到字符串数组中最短字符串的长度
int min = Integer.MAX_VALUE;
for (int i = 0; i < strings.length; i++) {
if (min > strings[i].length())
min = strings[i].length();
}
return min;
}
解法二:每两个字符串进行比较
思路*:每次比较俩字符串,得出公共字符串,再和后面一个字符串比较。
分析:效率较第一种解法腰快捷。
public static String test2(String[] strs) {
if (strs.length == 0)
return "";
String res = strs[0];
for (int i = 1; i < strs.length; i++) {
int j = 0;
for (; j < res.length() && j < strs[i].length();j++){
if (res.charAt(j) != strs[i].charAt(j))
break;
}
res = res.substring(0, j);
if (res.equals("")) //如果公共字符串为空,则直接返回""
return "";
}
return res;
}
}