zoukankan      html  css  js  c++  java
  • 最长公共前缀(java实现)

    题目:

    编写一个函数来查找字符串数组中的最长公共前缀。

    如果不存在公共前缀,返回空字符串 ""

    示例 1:

    输入: ["flower","flow","flight"]
    输出: "fl"
    

    示例 2:

    输入: ["dog","racecar","car"]
    输出: ""
    解释: 输入不存在公共前缀。
    

    说明:

    所有输入只包含小写字母 a-z 。

    分析:

      1.数组中放的是字符串,每个字符串也有自己的长度

      2.需要找到数组中最短的字符串,因为其他字符超了的不可能和这个字符再有交集

      3.定1,让后面的字符和第一个字符的每一个元素比较,相同的返回。

    代码如下:

    class Solution {
        public String longestCommonPrefix(String[] strs) {
            if(strs == null || strs.length == 0){
                return "";
            } 
            if(strs.length == 1){
                return strs[0];
            }
            int len = strs[0].length();
            for(String str:strs){
                len = Math.min(len,str.length());  //得到字符数组里面最短字符的长度
            }
            if(len == 0){  //其中的一个字符为空的情况
                return " ";
            }
            StringBuffer res = new StringBuffer(len);
            //每个字符只需要遍历到最小长度即可,因为大于最小长度字符的那一部分不可能有公共
            for(int j = 0; j < len;j++){ 
                for(int t= 0;t < strs.length;t++){
                    if(strs[t].charAt(j) != strs[0].charAt(j)){ //每个与第一个字符开始比较,也就是与下标为0的字符的元素比较。
                       return res.toString();
                    }
                }
                res.append(strs[0].charAt(j)); //相同就加进结果集
            }
            return res.toString();
        }
    }
    

     我在LeetCode看到一种解法,时间复杂度看着很小,因为它利用了Java特有的函数。但是函数内部的时间复杂度就不明而已了。这个代码也是比较简洁的。我们来看看:

    代码如下:

    class Solution {
         public String longestCommonPrefix(String[] strs) {
             String ret = "";
             
             if(strs.length == 0) return ret;
             if(strs.length == 1) return strs[0];
             
             ret = strs[0];
            
             for(int i = 1; i < strs.length; i++){
                 while (!strs[i].startsWith(ret)){ //判断与第一个元素的相同字符
                    ret = ret.substring(0, ret.length()-1);
                     if (ret.length() == 0){
                         return "";
                     }
                 }
             }
             return ret;
         }
    }
    
  • 相关阅读:
    ESP8266 在线构建 固件
    NodeMCU 物联网开发快速上手
    vofaplus-plugins dtantdir
    欧拉角
    DebugView 简单使用
    Intrusion Detection Evaluation Dataset (CIC-IDS2017)
    ureport
    how to ignore server cert error in javamail
    465和587区别
    JavaMail 发送邮件阻塞问题解决——设置 smtp 超时时间
  • 原文地址:https://www.cnblogs.com/youdiaodaxue16/p/10749844.html
Copyright © 2011-2022 走看看