1 题目理解
题目的理解就是给定一堆字符串,从中找出最长的公共前缀。前缀是什么?可以理解为一个字符串开头的几个字母,那么公共前缀,就是这一堆字符串开头的前几个(前缀)的最大相同长度是多少。。。就是所有字符串都有的共同的开头。
这道题我给了两个解题方式:
1、设index=0,遍历每一个字符串,看他们的第index位是否和第1个字符串的第index个相同,如果全部都相同,index++,进入下一路,如果有一个不相同了,那么久直接返回index,index就是最长的公共前缀的长度
2、第二种解法,首先找出第一个和第二个的最长公共前缀为lastprefix,然后用这个lastprefix去和第三个比,找到一个新的lastprefix。。。
这样就避免了很多无谓的比较。
PS:
1、按照我的惯例,可以把String提前改变成Char[],我觉得可能会快些。。只是我觉得。。没测试过。。
2、还是少用String可以提升速度。。不过一般情况下,还是String快。。这也没必要太纠结
2 原题
Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings.
3 AC解(Java) 两方法
public class Solution {
/**
* 直接循环比较就好了,循环比较
* */
public String longestCommonPrefix2(String[] strs) {
if(strs.length<1)
return "";
int count=0,i=0,j,n=strs[0].length();
for(j=1;j<strs.length;j++){
n=Math.min(n,strs[j].length());
}
for(i=0;i<n;i++){
for(j=1;j<strs.length;j++){
if(strs[j].charAt(i)!=strs[0].charAt(i)){
return strs[0].substring(0,count);
}
}
count++;
}
return strs[0].substring(0,count);
}
/**
* 先比较第一和第二,再用这个结果去比较第三,然后第四,减少比较次数
* */
public String longestCommonPrefix(String[] strs) {
if(strs.length<1)
return "";
int lastsame=strs[0].length(),i=1,j;
char chars[]=strs[0].toCharArray();
while(i<strs.length){
lastsame=Math.min(lastsame,strs[i].length());
j=0;
for(j=0;j<lastsame;j++){
if(chars[j]!=strs[i].charAt(j)){
lastsame=j;
break;
}
}
i++;
}
return strs[0].substring(0,lastsame);
}
}