zoukankan      html  css  js  c++  java
  • LeetCode之最长公共前缀超详细java讲解

    描述:编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。例如输入: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

  • 相关阅读:
    Kvm --01 虚拟化基础概念
    Git--09 创建Maven项目
    Git--08 Jenkins
    Git--07 Gitlab备份与恢复
    Git --06 Git-gui安装
    Git --05 Gitlab使用
    Git--04 Github使用
    socket 释放全过程
    动态规划习题总结
    linux heap堆分配
  • 原文地址:https://www.cnblogs.com/liuhuaabcp/p/14817403.html
Copyright © 2011-2022 走看看