zoukankan      html  css  js  c++  java
  • 题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 }

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

  • 相关阅读:
    THUPC2018 好图计数
    CF1349F1
    CF1098E
    [HNOI2011]卡农
    CF736D Permutations(伴随矩阵)
    uoj310【UNR #2】黎明前的巧克力(FWT)
    知识点简单总结——常系数齐次线性递推
    知识点简单总结——带花树(一般图最大匹配)
    知识点简单总结——Pollard-Rho算法
    知识点简单总结——二次剩余
  • 原文地址:https://www.cnblogs.com/missjingjing/p/9627767.html
Copyright © 2011-2022 走看看