• 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;
    	}
    }
    
  • 相关阅读:
    交换机/路由器上的 S口 F口 E口
    对称加密&非对称加密
    字节流和字符流 in Java
    Python中使用MySQL
    完全二叉树、理想二叉树满二叉树
    优化MySchool数据库设计
    关于SQL储存过程中输出多行数据
    关于本月第一天,本月最后一天的SQL代码
    SQL常见的系统存储过程
    相关子查询【SQL Server】
  • 原文地址:https://www.cnblogs.com/denggelin/p/11528349.html
Copyright © 2020-2023  润新知