题目:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串
""
。
自己解法
public class Test2 {
public static void main(String[] args) {
String[] strs = {"flower","flow","flight"};
int result1=contest(strs[0],strs[1]);
int result2 = 0;
int min=0;
for (int i = 1; i < strs.length-1; i++) {
result2=contest(strs[i],strs[i+1]);
if (result1>result2){
min=result2;
}
else {
min=result1;
}
result1=result2;
}
if (min==0){
return "";
}
else {
return strs[0].substring(0,min);
}
}
public static int contest(String first,String second){
int count=0;
//求出两者之间最短的作为循环用的长度
String min;
if (first.length()<second.length()){
min=first;
}
else min=second;
System.out.println("min "+min);
//进入循环比较
for (int i = 0; i < min.length(); i++) {
if (first.charAt(i)==second.charAt(i)){
count++;
}
}
return count;
}
}
改进点:
1.
官方解法
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
String prefix = strs[0];
int count = strs.length;
for (int i = 1; i < count; i++) {
prefix = longestCommonPrefix(prefix, strs[i]);
if (prefix.length() == 0) {
break;
}
}
return prefix;
}
public String longestCommonPrefix(String str1, String str2) {
int length = Math.min(str1.length(), str2.length());
int index = 0;
while (index < length && str1.charAt(index) == str2.charAt(index)) {
index++;
}
return str1.substring(0, index);
}
}
总结:
自己:
函数:先通过比较两个字符串长度确定以谁为循环长度,分别对比每一个字符串,找出最长相同然后返回相同的长度count;
上部分通过返回的长度跟前面返回的长度进行对比,把短的长度赋值给min,最后再根据min通过substring进行截取
官方:
函数:通过Math先找最短长度,设指针确定相同长度(同count),返回值为截取结果;
上部分先确定strs不是空的,presix是先将第一个视为结果,带到后面进行对比,count直接获得strs长度,presix进去跟下一个字符串相对比,结果再赋值给prefix,好接着跟下面的比,最后输出prefix
改进点:
1. 对比字符串长度
int length = Math.min(str1.length(), str2.length());
2.先考虑strs是否为空的情况
3.直接用截取结果进行对比