题目及用例
package pid014;
/*最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
*/
public class main {
public static void main(String[] args) {
String [][] testTable = {{"flower","flow","flight"},{"dog","racecar","car"}};
for (String[] ito : testTable) {
test(ito);
}
}
private static void test(String[] ito) {
Solution solution = new Solution();
String rtn;
long begin = System.currentTimeMillis();
for(int i=0;i<ito.length;i++){
System.out.print(ito[i]+" ");
}
System.out.println();
//开始时打印数组
rtn= solution.longestCommonPrefix(ito);//执行程序
long end = System.currentTimeMillis();
System.out.println("rtn" );
System.out.print(rtn);
System.out.println();
System.out.println("耗时:" + (end - begin) + "ms");
System.out.println("-------------------");
}
}
解法1(成功,9ms,很快)
具体方法是先算出所有字符串的最小长度,在最小长度内循环
每次取第一个字符串的对应字符作基准,如果后面的与他相同,则小循环后结果加入这个,否则直接返回结果
package pid014;
import java.util.Arrays;
public class Solution {
public String longestCommonPrefix(String[] strs) {
int num=strs.length;//num为总共几个字符串
if(num==0){
return "";
}
if(num==1){
return strs[0];
}
int min=strs[0].length();
for(int i=1;i<num;i++){
if(strs[i].length()<min){
min=strs[i].length();
}
}//得到最小的长度
StringBuilder a=new StringBuilder();
for(int i=0;i<min;i++){
char now=strs[0].charAt(i);
for(int j=1;j<num;j++){
if(strs[j].charAt(i)!=now){
return a.toString();
}
}
a.append(now);
}
return a.toString();
}
}
解法2(成功,3ms,较快)
与上面方法差不多,就是将记录一个stringbuilder变成只记录最后一个对应的字符的index,返回时直接substring即可
public String longestCommonPrefix(String[] strs) {
int size=strs.length;
if(size==0){
return "";
}
if(size==1){
return strs[0];
}
//这个为所有字符串中最短的length
int minLength=strs[0].length();
for(int i=1;i<size;i++){
if(minLength>strs[i].length()){
minLength=strs[i].length();
}
}
int index=0;
for(int i=0;i<minLength;i++){
char now=strs[0].charAt(i);
for(int j=1;j<size;j++){
if(now!=strs[j].charAt(i)){
return strs[0].substring(0, index);
}
}
index++;
}
return strs[0].substring(0, index);
}