Skip to content

3、简易题14- 最长公共前缀

① 题目要求

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

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

官方给的实例:

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


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

② 思路分析

  • 分析:

取出最长公共前缀,那我们就可以直接拿第一个出来,然后转为数组,然后拿后面的每一个去跟这个第一项作比较,看里面的字符是否相同,如果后面的字符创长度比这个第一项还短,那就可以直接忽略不计。比这个长的话,游戏继续。

具体实现:

数组为空,返回’’

循环里面的字符串每个的长度 i

循环外层数组长度 s

判断flower 下的f是否和flow 下的f相同

相同=> 返回l拼接到第一个下面依次

不相同=> 返回原本的

plain
//
var longestCommonPrefix = function(strs) {
    if(strs.length==0){
          return ''   
      };
      var allstring = "";
      for (var s = 0; s < strs[0].length; s++) {
          var dataA = strs[0][s];
          for (var m = 1; m < strs.length; m++) {
              if ( s >= strs[m].length ||  strs[m][s] !== strs[0][s]) {
                  return allstring;
              }
              allstring +=  strs[0][s];
          }
      }
      return allstring
};

输出以后发现,虽然貌似没啥毛病,但是就是除了问题。

js
ffllo strsall

完善我们的代码以后:

js
var strs = ["flower", "flow", "flight"],flower = ['f', 'l'];
      function strscommon(strs){
        if(strs.length==0){
         return ''   
        };
        var allstring = "";
        for (var s = 0; s < strs[0].length; s++) {
            var dataA = strs[0][s];
            for (var m = 1; m < strs.length; m++) {
                if ( s >= strs[m].length ||  strs[m][s] !== strs[0][s]) {
                    return allstring;
                }
            }
            allstring +=  strs[0][s];
        }
}
console.log(strscommon(strs),'strsall');

查看我们的输出结果:

js
fl strsall

解题完成!

Released under the MIT License.