[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

 

转载于:https://www.cnblogs.com/cuphoria/p/9784480.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值