• 题14:最长公共前缀


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

      

      虽然领扣把这个题标记成简单,但是我看了好多次以后才有了思路...... 因为要求的是公共前缀,所以必须数组的每项都要包含这个"前缀",所以比较数组中每个元素,取出大家都有的部分是最终目的,逻辑上最然简单,但是javaScript没有直接的方法. 想了很久之后,想到用之前求最大值的方法,随意取出数组中的一个元素(因为是公共前缀,所以谁都一样),用这个元素依次和数组中其他每一个元素的每一个字符做比较,每有一个字符满足题意时,就用一个新的字符串去接收,最后返回这个新字符串即可

     1 function getLongest(arr) {
     2   //假设第一项为最短项,用来与其他对比
     3   var short = arr[0];
     4   var newStr = '';
     5   //先判断数组长度为0和不存在内容等不满足题意的情况
     6   if (arr.length == 0) {
     7     return '';
     8   } else if (short == '') {
     9     return '';
    10   } else {
    11     //外循环以short为比较对象,遍历short的每一个字符
    12     for (var i = 0; i < short.length; i++) {
    13       //内循环遍历数组中除第一项以外的其他项,依次与short做比较
    14       for (var j = 0; j < arr.length; j++) {
    15         //用short的每一个字符与数组中其他元素的每一个字符做比较,当不相等时,返回当前newStr
    16         if (short[i] != arr[j][i]) {
    17           return newStr;
    18         }
    19       }
    20       //依次比较short的每个字符,每次执行完之后,更新newStr
    21       newStr = short.slice(0, i + 1);
    22     }
    23     return newStr;
    24   }
    25 }

      当时在两个循环嵌套的时候,卡了比较久的时间,后来才想到用截取字符串的方法动态改变字符串的办法.

      第二种方法虽然和这个类似,但是代码更简洁,知识不是很容易想到,对我而言..... 我是在第一种方法的基础上,慢慢归结出第二个方法 这个办法也是用循环和截取字符串结合的方法,但是在截取字符串的时候是从后向前截取,这样最开始拿到的就是"可能的最长公共前缀",每次循环减少字符串的长度,直到满足题意. 这样做有一个好处是在都不匹配的时候会直接返回空字符串(字符串所有内容都被截取掉)

     1 function getLongest(arr) {
     2   //假设第一项为最短项,用来与其他对比
     3   // var short = arr[0];
     4   var i = 1;
     5   if (arr.length == 0 || arr == null) return "";
     6   //遍历数组
     7   while (i < arr.length) {
     8     //用数组中第一项去依次和数组中其他项匹配,匹配成功索引值会为0
     9     while (arr[i].indexOf(short) != 0) {
    10       //当匹配不到时,从后向前裁剪字符串,假如一直不匹配,最后会裁剪到只有一个空字符串,正好满足题意
    11       short = short.substring(0, short.length - 1);
    12     }
    13     //如果有匹配,就i自增,遍历数组的下一项
    14     i++;
    15   }
    16   return short;
    17 }

      写完都觉得这题不算简单....

  • 相关阅读:
    shell中定义变量用双引号和单引号以及不用引号的区别
    如何优雅的解决mac安装zsh不执行.bash_profile
    Spring在非web应用中关闭IoC容器 (registerShutdownHook)
    【Quartz】配置最简单的集群
    【Quartz】将定时任务持久化到数据库
    Mysql字符串字段判断是否包含某个字符串的3种方法
    函数:MySQL中字符串匹配函数LOCATE和POSITION使用方法
    MySQL字符串函数substring:字符串截取
    logback logback.xml常用配置详解 <filter>
    logback 常用配置详解<appender>
  • 原文地址:https://www.cnblogs.com/missjingjing/p/9627767.html
Copyright © 2020-2023  润新知