[路飞]_LeetCode题14最长公共前缀

143 阅读1分钟

题目描述

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

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

 

示例 1:

输入:strs = ["flower","flow","flight"] 输出:"fl" 示例 2:

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

提示:

1 <= strs.length <= 200 0 <= strs[i].length <= 200 strs[i] 仅由小写英文字母组成

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/lo… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解思路

因为找的是公共的前缀,所以按照题意,任意比较两个字符串,从第一个字符开始比较,找出连续相等的字符,截取出来作为公共前缀,直到所有字符串比较完,最后只要公共前缀不为空则存在,返回前缀。

题解代码

/*
 * @lc app=leetcode.cn id=14 lang=javascript
 *
 * [14] 最长公共前缀
 */

// @lc code=start
/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    if (!strs.length) return "";
    //因为找的是公共的前缀,所以按照题意,任意比较两个字符串,
    //从第一个字符开始比较,找出连续相等的字符,截取出来作为公共前缀,
    //直到所有字符串比较完,最后只要公共前缀不为空则存在,返回前缀
    let publicStr = strs[0];
    for (let i = 1; i < strs.length; i++) {
        let j = 0;
        for (; j < publicStr.length && j < strs[i].length; j++) {
            //从第一个字符比较两个串直到遇到两个串同一位置字符不同为止
            if (publicStr[j] !== strs[i][j]) break;
        }
        //index之前的字符即为相同的字符,截取出来
        publicStr = publicStr.substring(0,j);
        //如果结果是空,说明不具备公共的前缀,直接返回
        if (publicStr === "") return publicStr;
    }
    return publicStr;
};
// @lc code=end