[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
原文地址:https://www.cnblogs.com/cuphoria/p/9784480.html