Leetcode14. Longest Common Prefix

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

1. 解法一

思路

对字符串数组进行排序,比较第一个字符串和最后一个字符串的公共前缀

代码

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        if len(strs) == 0:
            return ""
        strs.sort()
        for i in range(min(len(strs[0]), len(strs[-1]))):
            if strs[0][i] != strs[-1][i]:
                return strs[0][0:i]
        return strs[0]      

解法二

思路

从长度入手,利用二分法不断寻找最大的公共前缀的长度。

public class Solution{
  public String longestCommonPrefix(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 = 0;
    int high = minLen;
    while (low <= high) {
      int mid = (low + high) / 2;
      if (isPrefix(strs, mid)) {
        low = mid + 1;
      }else{
        high = mid - 1;
      }
    }
    return strs[0].substring(0, (low+high)/2);
  }
  private boolean isPrefix(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; 
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容