zoukankan      html  css  js  c++  java
  • [JS]给定字符串,要求重新排列,求没有重复字符串的数目

    题目描述:

    No repeats please


    把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数.连续重复只以单个字符为准

    例如, aab 应该返回 2 因为它总共有6中排列 (aab, aab, aba, aba, baa, baa), 但是只有两个 (aba and aba)没有连续重复的字符 (在本例中是 a).

    题目来源:FREECODECAMP304


    解决问题:
    • 重新排列
    • 删除重复

    解决方法:

    • 不按照数学排列,直接枚举删去不符合条件的值
    • 枚举采用全排列
    • 正则表达式var re = /(.)1+/g;

    代码:
     1 function permAlone(str) {
     2   var arr=str.split("");
     3   var result=[];
     4   perm(arr,0,arr.length-1,result);//result存储所有字符串
     5   var Test=/(.)1+/g;
     6   result=result.filter(function(val){ return !val.match(Test);});//match函数匹配不符合条件的串
     7   
     8   return result.length;
     9   
    10 }
    11 function perm(arr,f,l,result)
    12 {
    13  
    14 if(f==l) {var str=arr.join(""); result.push(str); return result;}
    15   else{
    16     for(var i=f;i<=l;++i)
    17       {
    18         var temp=arr[f];
    19         arr[f]=arr[i];
    20         arr[i]=temp;
    21         perm(arr,f+1,l,result);//迭代
    22         temp=arr[f];
    23         arr[f]=arr[i];
    24         arr[i]=temp;
    25       }
    26   }
    27 }
    28 permAlone('aab');

    遇到的问题:

    将match函数换成test函数,结果将错误,内部的所有测试样例都符合条件,但是在filter函数里都是错误。原因未知。

     相关链接:

    正则表达式教程之重复匹配详解https://www.jb51.net/article/102442.htm

    java连续多位相同字符判断的正则表达式https://my.oschina.net/duanyunhu/blog/213397

    原创供学习参考使用,转载请注明出处http://www.cnblogs.com/cuphoria/ @jm_epiphany
  • 相关阅读:
    Linux_9/ RAID & LVM
    Linux_8/ fdisk, xfs_quota, edquota
    Linux_7/(chattr, lsattr), (setfacl, getfacl),su
    Linux_6/ Vim, Shell(下),(at, crond), (SUID, SGID, SBIT)
    Linux_5/ Vim, Shell(上)
    Linux_4/ |, (>, 2>, &>, >>, 2>>)
    Map集合的遍历
    List集合三种遍历方法
    MySQL安装
    排序法
  • 原文地址:https://www.cnblogs.com/cuphoria/p/9784480.html
Copyright © 2011-2022 走看看