码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode之最长公共前缀超详细java讲解

时间:2021-06-02 12:53:32      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:位置   变量   image   return   rac   common   ace   longest   rgba   

技术图片

描述:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。例如输入:strs = ["flower","flow","flight"],输出:"fl"。输入:strs =["dog","racecar","car",输出:""。

思路一:横向扫描,从第一个开始,把第一个逐个和后面的进行比较,得到最长公共前缀。

时间复杂度:O(m*n)其中 m是字符串数组中的字符串的平均长度,n 是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。

空间复杂度:O(1)常数个空间变量

    //方法一横向扫描
    public String longestCommonPrefix(String[] strs){
        if(strs.length == 0 || strs == null){
            return "";
        }
        String prefix = strs[0];
        for(int i = 1;i<strs.length;i++){
            prefix = longestCommonPrefix(prefix,strs[i]);
            if(prefix.length() == 0){
                return "";
            }

        }
        return prefix;
    }

    private String longestCommonPrefix(String str1, String str2) { //两个字符串的最长公共前缀
       int length = Math.min(str1.length(),str2.length());
        int index = 0;
        while(index<length && str1.charAt(index) == str2.charAt(index)){
            index++;
        }

        return str1.substring(0,index);  //取到第零个位置到第i个位置的字符串,即最长公共前缀。
    }

技术图片

 

 

 思路二:纵向扫描,即从前往后遍历所有字符串的每一列,比较相同列上的字符是否相同,如果相同则继续对下一列进行比较,如果不相同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀

时间复杂度:O(m*n)其中 m是字符串数组中的字符串的平均长度,n 是字符串的数量。最坏情况下,字符串数组中的每个字符串的每个字符都会被比较一次。

空间复杂度:O(1)常数个空间变量

   //方法二纵向扫描
    public String longestCommonPrefix2(String[] strs){

       if(strs == null || strs.length == 0){
           return  "";
       }
       String prefix = "";
       int length = strs[0].length();
       int count = strs.length;
       for(int i = 0;i<length;i++){   //表示第一个字符串的第i位
           char c = strs[0].charAt(i);
            for(int j = 1;j<count;j++){  //从第二个字符串开始纵向比较
                 if(i == strs[j].length() || strs[j].charAt(i) != c){
                     return strs[0].substring(0,i);
                 } //i == strs[i].length()用于判断后面的字符串的长度是否小于第一个,这样就可以提前结束
            }      //strs[j].charAt(i) != c不相等,直接结束。
       }
        return strs[0];
    }

技术图片

 

 

 

 

 

2021-05-27

LeetCode之最长公共前缀超详细java讲解

标签:位置   变量   image   return   rac   common   ace   longest   rgba   

原文地址:https://www.cnblogs.com/liuhuaabcp/p/14817403.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!