zoukankan      html  css  js  c++  java
  • 最长公共前缀

    最长公共前缀

    编写一个函数来查找字符串数组中的最长公共前缀。
    如果不存在公共前缀,返回空字符串""

    示例

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

    题解

    // 横向比较
    /**
     * @param {string[]} strs
     * @return {string}
     */
    var longestCommonPrefix = function(strs) {
        if(strs.length === 0) return "";
        return strs.reduce( (pre, cur) => {
            var tmp = "";
            for(let i=0;i<pre.length; ++i){
                if(pre[i] === undefined || pre[i] !== cur[i]) break;
                else tmp += cur[i];
            }
            return tmp;
        })
    };
    
    // 纵向比较
    /**
     * @param {string[]} strs
     * @return {string}
     */
    var longestCommonPrefix = function(strs) {
        var n = strs.length;
        var target = "";
        var interrupt = false;
        var i = -1;
        while(true) {
            ++i;
            if(!strs[0]) return "";
            var tmp = strs[0][i];
            for(let k=0; k<n; ++k){
                if(strs[k][i] === undefined || tmp !== strs[k][i]) {
                    interrupt = true;
                    break;
                }
            }
            if(interrupt) break;
            target = `${target}${tmp}`;
        }
        return target;
    };
    

    思路

    横向比较的方法是借助Js标准库的reduce方法,将每次比较的结果进行返回,作为下一次比较传入函数的第一个参数,第二个参数就是当前的字符串,注意reduce方法在没有第三个参数的情况下是以数组中第二个值作为传入函数的第二个参数也就是当前值,也就是说长度为n的数组只会计算n-1次。纵向比较的方式就是依次比较字符串数组中每个字符,即不断循环比较所有字符串的第12...n个字符,在比较的过程中在列中出现不相同的字符即结束循环并返回结果。

    每日一题

    https://github.com/WindrunnerMax/EveryDay
    

    参考

    https://leetcode-cn.com/problems/longest-common-prefix/
    
  • 相关阅读:
    MySQL的小Tips
    Linux中Eclipse下搭建Web开发环境
    SaaS的那些事儿
    典型的软件过程模型
    浅谈「敏捷」开发
    软件工程的本质
    堆和优先队列
    c 判断文件或文件夹是否存在,多种方法, 为什么从一开始就不直接来个统一的呢?
    大江河流尽
    jpg、png格式的图片转换成webp后颜色失真的问题
  • 原文地址:https://www.cnblogs.com/WindrunnerMax/p/13357384.html
Copyright © 2011-2022 走看看