Leetcode_14. 最长公共前缀(Java解法)

题目:14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 " "。

示例 1:

输入:strs = [“flower”,“flow”,“flight”
输出:“fl”

示例 2:

输入:strs = [“dog”,“racecar”,“car”]
输出:""
解释:输入不存在公共前缀。

提前说,我先用了一个Arrays工具类中的自定义比较方法,通过字符串数组中元素长度进行排序,这样就大大降低了后面进行判断是否是该前缀时,所引发的空指针异常和字符串下标越界异常的可能。
直接看代码:

class Solution {
    public String longestCommonPrefix(String[] strs) {
     	//默认空字符串数组无公共前缀
		 if(strs.length==0){ return "";}
		 //默认字符串数组只有一个元素时,该元素就是他的公共前缀
	     if(strs.length==1){return strs[0];}
	     
	     //根据数组中字符串的长度进行排序
		 Arrays.sort(strs, new Comparator<String>() {
			 @Override
			public int compare(String o1, String o2) {
				// TODO Auto-generated method stub
				return o1.length()>=o2.length()?1:-1;
			}
		});
		 
		 //创建公共前缀的字符串并赋值为strs数组第一个元素
		 String CommonPrefix=strs[0];
		 
		 //从数组的第二个(即下标为1)元素开始遍历
		for(int i=1,len=strs.length;i<len;i++) {
			
			//如果该元素只有一个字符,并且与公共前缀CommonPrefix不同,返回空字符串
			 if(strs[i].length()==1 && !CommonPrefix.equals(strs[i])) {
				 return "";
			 }
			 
			 //判断该元素是否以该公共前缀开始,若不是
			 if(!strs[i].startsWith(CommonPrefix)) {
			
				 //遍历该元素,至公共前缀的长度
				 for(int k=0;k<CommonPrefix.length();k++) {
					
					 //判断第k为字符是否与公共前缀第k为相同,若不同
					if(strs[i].charAt(k)!=CommonPrefix.charAt(k)) {
						
						//截取该元素的前k位传给公共字符串
						CommonPrefix=strs[i].substring(0,k);
					}
				}
			 }	
		}
		//返回公共前缀
		return CommonPrefix;   
	 }
}

最后附上题目链接:14. 最长公共前缀

你可能感兴趣的:(Leetcode,字符串,数据结构,leetcode,java)