题目:
写一个函数(或方法)来寻找一个字符串数组中的最长公共前缀。
解析:
这道题目的意思是给你一组字符串,然后找出其中最长的公共前缀,这个不难找,但是如何找的又快又好呢?
思路:
在头部的公共子串,最长也不过是等于所有字符串里面的最小长度,所以第一个字符串的长度一定大于或等于最长公共前缀。首先从第一个字符开始比较,如果每个字符串的第一个字符相同,那么计入公共前缀中,依次向后比较,直到找到一个不同的字符时终止。
代码:
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length==0)return "";
int len = strs[0].length();
int minp = 0;
for(int m =0;m<strs.length;m++){
//len是所有字符串中的最小长度,minp存放的最短字符串在数组中的位置
if(strs[m].length()<len){
len = strs[m].length();
minp = m;
}
//如果有字符串为空,则返回空
if(strs[m].length()==0){
return "";
}
}
String result = "";
for(int i = 0;i<len;i++){
for(int j = 0;j<strs.length;j++){
char s1 = strs[minp].charAt(i);
char sj = strs[j].charAt(i);
if(s1!=sj){
result = strs[minp].substring(0,i);
return result;
}
}
}
return strs[minp];
}
}
后记:
这又是一道esay题目,但是我解题起来还是花了点时间,主要是开始没有考虑到先按断最短字符串的问题,直接默认了从第一个数组的第一位开始往后比较,这样存在问题,如:第二个字符串比第一个字符串还短,甚至为空串时,程序就会报错:index out of range
表示超出范围。
以后考虑问题还是要全面且准确。