题解 | #最长公共前缀#
最长公共前缀
http://www.nowcoder.com/practice/28eb3175488f4434a4a6207f6f484f47
题目要求:给你一个大小为 n 的字符串数组 strs ,其中包含n个字符串 , 编写一个函数来查找字符串数组中的最长公共前缀,返回这个公共前缀。
1.新建一个包,包名jiandan;包中新建一个类NC55,代码如下。
2.思路是: 首先判断数组中最小的有一个字符串出来,最小公共前缀一定是从中出来
然后对该最小字符串进行切割,遍历每个数组元素是否满足前缀要求,使用startWith()方法判断是否是该前缀。
package jiandan;
public class NC55 {
public static void main(String[] args) {
String[] strs = {};
String str = longestCommonPrefix(strs);
System.out.println(str);
}
public static String longestCommonPrefix (String[] strs) {
StringBuffer sb = new StringBuffer();
int min = Integer.MAX_VALUE;
String minStr = "";
if(strs.length > 1){
for(int i = 0; i < strs.length; i++){ //遍历每个字符串
int len = strs[i].length();//计算每一个字符串的长度
if(len < min){ //拿到最小的一个字符串,公共串一定在最小串中产生
min = len;
minStr = strs[i];
}
}
}else if(strs.length == 1){
return strs[0];
}else{
return "";
}
if(minStr.length() > 1){
//分割最小字符串,进行判断是否每个数组元素都包含该公共串
for(int j = minStr.length(); j >0; j--){
if(isContains(strs,minStr)){
return minStr;
}
String subStr = minStr.substring(0,j-1);
if(isContains(strs,subStr)){
return subStr;
}
}
}else if(minStr.length() ==1){
if(isContains(strs,minStr)){
return minStr;
}
return "";
}
return "";
}
//判断每一个数组元素,是否包含该子串
public static boolean isContains(String[] strs,String subStr){
for(int i = 0; i < strs.length; i++){
if(!strs[i].startsWith(subStr)){
return false;
}
}
return true;
}
}