leetcode题目 14. 最长公共前缀

题目

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 “”。

示例

示例 1:

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

示例 2:

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

我的思路

很简单,选一个最短的字符串作为基准,然后依此与每个字符串比较,找出最长前缀,然后依此前缀对后一个进行比较,比较玩为止。

我的代码


//最长公共前缀
public class problem14 {
	public String longestCommonPrefix(String[] strs) {
        //特判
        if(strs.length==0) return "";
        if(strs.length==1) return strs[0];
        
        String res=strs[0];
        
        //首先找到长度最短的一个字符串,这有助于在数据量大时减少时间
        int length=strs[0].length();
        for(int i=0;i<strs.length;i++){
        	if(length>strs[i].length()){
        		length=strs[i].length();
        		res=strs[i];
        		if(res=="") return "";
        	}
        }
        
        for(int i=0;i<strs.length;i++){
        	res=search(res, strs[i]);
//        	System.out.println(res);
        }
        
        
        return res;
    }
	
	//寻找最长公共前缀
	public String search(String str1,String str2){
		StringBuilder strbu=new StringBuilder();
		
		for(int i=0;i<str1.length()&&i<str2.length();i++){
			if(str1.charAt(i)==str2.charAt(i)){
				strbu.append(str1.charAt(i));
			}else{
				break;
			}
		}
		
		return strbu.toString();
	}
	
	public static void main(String[] args) {
		problem14 pro=new problem14();
		String[] strs={"flower","flow","flight"};
		System.out.println(pro.longestCommonPrefix(strs));
	}
}

大佬的代码(思路写在注释里的)

public class problem14_2 {
	public String longestCommonPrefix(String[] strs) {
		if (strs.length == 0)
			return "";
		String prefix = strs[0];
		
		//思路,以第一个字符串为基准,对以后的字符串进行查找
		//查找第一个字符串是否是其实字符串的前缀,
		//对于每个字符串,如果是,则继续向下一个字符串查找
		//如果不是,则把第一个字符串的字符减去最后一个,重复查找操作,知道找到或者字符串减为空
		for (int i = 1; i < strs.length; i++)
			//int indexOf(String str): 返回指定字符在字符串中第一次出现处的索引
			//如果此字符串中没有这样的字符,则返回 -1。
			while (strs[i].indexOf(prefix) != 0) {
				//public String substring(int beginIndex, int endIndex)
				//beginIndex -- 起始索引(包括), 索引从 0 开始。
				//endIndex -- 结束索引(不包括)
				System.out.println(prefix);
				prefix = prefix.substring(0, prefix.length() - 1);
				if (prefix.isEmpty())
					return "";
			}
		return prefix;
	}

	public static void main(String[] args) {
		problem14_2 pro = new problem14_2();
		String[] strs = { "flower", "flow", "flight" };
		System.out.println(pro.longestCommonPrefix(strs));
	}
}
其实思路没什么区别,但很明显大佬的代码比我的简单了太多,
不过跑出来结果也差不多,主要就是对java的熟悉程度的问题
发布了31 篇原创文章 · 获赞 0 · 访问量 341

猜你喜欢

转载自blog.csdn.net/qq_36360463/article/details/104122131