和师兄昨晚刷的又一道编程题
如果有相同的就输出相同前缀,否则的话输出“ ”
代码如下
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length==0||strs==null) //如果数组为长度为0或者数组为空是为了防止空指针异常
return ("");
if(strs.length==1){ //数组的长度为1,直接输出这个数组里面的字符串
return strs[0];
}
int shorest=0;
int len=strs[0].length();//定义一个最短下标,最短长度变量
for(int i=1;i<strs.length;i++){
if(strs[i].length()<len){
shorest=i;
len=strs[i].length();//找到最短的长度和下标
}
}
String sub=strs[shorest];
for(int j=0;j<strs.length;j++){
while(strs[j].indexOf(sub)!=0){//如果sub字符串和strs【i】前缀相同就位0,跳出while循环
sub=sub.substring(0,sub.length()-1);
}
}
return sub;
}
}
思想:首先找到数组中最短的字符串:令一个下标代表数组中的位置,长度代表字符串的长度;然后逐个和所有的数组中字符串比较前缀:indexOf()就是括号里面的字符串在外面字符串的起始位置,如果不是全部相同的话把括号里面的字符串减一通过substring来输出减一之后的字符串,逐次比较相同前缀知道找出最短的前缀。