zoukankan      html  css  js  c++  java
  • LeetCode_14. Longest Common Prefix

    14. Longest Common Prefix

    Easy

    Write a function to find the longest common prefix string amongst an array of strings.

    If there is no common prefix, return an empty string "".

    Example 1:

    Input: ["flower","flow","flight"]
    Output: "fl"
    

    Example 2:

    Input: ["dog","racecar","car"]
    Output: ""
    Explanation: There is no common prefix among the input strings.
    

    Note:

    All given inputs are in lowercase letters a-z.

    package leetcode.easy;
    
    public class LongestCommonPrefix {
    	@org.junit.Test
    	public void test() {
    		String[] strs1 = { "flower", "flow", "flight" };
    		String[] strs2 = { "dog", "racecar", "car" };
    		System.out.println(longestCommonPrefix1(strs1));
    		System.out.println(longestCommonPrefix1(strs2));
    		System.out.println(longestCommonPrefix2(strs1));
    		System.out.println(longestCommonPrefix2(strs2));
    		System.out.println(longestCommonPrefix3(strs1));
    		System.out.println(longestCommonPrefix3(strs2));
    		System.out.println(longestCommonPrefix4(strs1));
    		System.out.println(longestCommonPrefix4(strs2));
    	}
    
    	public String longestCommonPrefix1(String[] strs) {
    		if (strs.length == 0) {
    			return "";
    		}
    		String prefix = strs[0];
    		for (int i = 1; i < strs.length; i++) {
    			while (strs[i].indexOf(prefix) != 0) {
    				prefix = prefix.substring(0, prefix.length() - 1);
    				if (prefix.isEmpty()) {
    					return "";
    				}
    			}
    		}
    		return prefix;
    	}
    
    	public String longestCommonPrefix2(String[] strs) {
    		if (strs == null || strs.length == 0) {
    			return "";
    		}
    		for (int i = 0; i < strs[0].length(); i++) {
    			char c = strs[0].charAt(i);
    			for (int j = 1; j < strs.length; j++) {
    				if (i == strs[j].length() || strs[j].charAt(i) != c) {
    					return strs[0].substring(0, i);
    				}
    			}
    		}
    		return strs[0];
    	}
    
    	public String longestCommonPrefix3(String[] strs) {
    		if (strs == null || strs.length == 0) {
    			return "";
    		}
    		return longestCommonPrefix3(strs, 0, strs.length - 1);
    	}
    
    	private String longestCommonPrefix3(String[] strs, int l, int r) {
    		if (l == r) {
    			return strs[l];
    		} else {
    			int mid = (l + r) / 2;
    			String lcpLeft = longestCommonPrefix3(strs, l, mid);
    			String lcpRight = longestCommonPrefix3(strs, mid + 1, r);
    			return commonPrefix(lcpLeft, lcpRight);
    		}
    	}
    
    	String commonPrefix(String left, String right) {
    		int min = Math.min(left.length(), right.length());
    		for (int i = 0; i < min; i++) {
    			if (left.charAt(i) != right.charAt(i)) {
    				return left.substring(0, i);
    			}
    		}
    		return left.substring(0, min);
    	}
    
    	public String longestCommonPrefix4(String[] strs) {
    		if (strs == null || strs.length == 0) {
    			return "";
    		}
    		int minLen = Integer.MAX_VALUE;
    		for (String str : strs) {
    			minLen = Math.min(minLen, str.length());
    		}
    		int low = 1;
    		int high = minLen;
    		while (low <= high) {
    			int middle = (low + high) / 2;
    			if (isCommonPrefix(strs, middle)) {
    				low = middle + 1;
    			} else {
    				high = middle - 1;
    			}
    		}
    		return strs[0].substring(0, (low + high) / 2);
    	}
    
    	private boolean isCommonPrefix(String[] strs, int len) {
    		String str1 = strs[0].substring(0, len);
    		for (int i = 1; i < strs.length; i++) {
    			if (!strs[i].startsWith(str1)) {
    				return false;
    			}
    		}
    		return true;
    	}
    }
    
  • 相关阅读:
    JS学习之构造函数、原型、原型链
    JS学习之面向对象(面向对象的创建方法,new运算符的工作原理)
    JS学习之事件流
    JS学习之生命周期与垃圾回收机制
    关于在XP操作系统和IIS5.1环境下的MVC环境搭建之IIS错误
    VS2010、.net 4.0下MVC3开发中Code First开发模式的数据迁移小结
    关于MVC3框架下的Jquery异步请求函数的学习心得之一——$.post()
    关于ASP调用存储过程的经典资料转载
    关于windows环境下的IIS 500内部服务器错误的一种解决办法
    接VS2010+Net+MVC3+EF4.1环境下的Code First一文的补充说明
  • 原文地址:https://www.cnblogs.com/denggelin/p/11528349.html
Copyright © 2011-2022 走看看