问题描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,“flow”,“flight”]
输出: “fl”
示例 2:
输入: [“dog”,“racecar”,“car”]
输出: “”
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
算法思想
按照题意,我们只需拿出数组中的第一个字符串,然后来判断其他字符串是否与第一个字符串指定位置上的字符相等,如果相等,就加入到前缀字符串中,这里要注意的问题是边界问题,例如,当数组中没有元素,或者数组中某个字符串过短,我们应该如何解决?
代码实现
class Solution {
public String longestCommonPrefix(String[] strs) {
String result="";
int i=0;
boolean flag=true; //标记变量
//如果数组长度为0,直接退出即可
if(strs.length==0){
return result;
}
while(true){
//如果循环中有字符串长度过小(走到头了)或者不符合公共前缀的规则,就退出循环
if(flag==false){
break;
}
//如果第一个字符串走到头了,就要退出
if(strs[0].length()<=i){
break;
}
char ch=strs[0].charAt(i); //取第一个字符串的指定位置上的字符
//然后将第一个字符串指定位置上的字符与其他字符串的进行比较
int j;
for(j=1;j<strs.length;j++){
//如果有其中某个字符串走到头了,就退出循环并标记
if(strs[j].length()<=i){
flag=false;
break;
}
if(ch==strs[j].charAt(i)){
continue;
}else{
flag=false;
break;
}
}
//如果本趟循环走到头了,还没有中途退出,就代表所有字符串都与第一个字符串指定位置上的字符相同
if(j==strs.length){
result=result+""+ch;
i++;
}
}
return result;
}
}