题解 | #最长公共前缀#

最长公共前缀

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;
	}
}

全部评论

相关推荐

牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
有趣的牛油果开挂了:最近这个阶段收到些杂七杂八的短信是真的烦
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务