boo*_*nka 6 javascript algorithm pattern-matching
我试图在一串二进制数字中找到重复模式.
例如.0010010010或1110111011 = ok
不.0100101101 =糟糕
字符串长度为10位(如上所述)&我猜测"模式"的2次迭代是最小的.
我开始手动设置程序可以匹配的"银行"模式但是必须有更好的方法使用算法?
搜索让我无处可去 - 我认为我使用的语言和术语不正确..
这是一个很大的挑战。这个功能怎么样?
function findPattern(n) {
var maxlen = parseInt(n.length/2);
NEXT:
for(var i=1; i<=maxlen; ++i) {
var len=0, k=0, prev="", sub;
do {
sub = n.substring(k,k+i);
k+= i;
len = sub.length;
if(len!=i) break;
if(prev.length && sub.length==i && prev!=sub) continue NEXT;
if(!prev.length) prev = sub;
} while(sub.length);
var trail = n.substr(n.length-len);
if(!len || len && trail==n.substr(0,len)) return n.substr(0,i);
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
它甚至适用于具有任何内容的任何长度的字符串。看小提琴
受 Jack 和 Zim-Zam 答案的启发,以下是暴力算法列表:
var oksubs =
["001","010","011","100","101","110",
"0001","0010","0011","0100","0101","0110","0111",
"1000","1001","1010","1011","1100","1101","1110",
"00000","00001","00011","00101","00110","00111","01000",
"01001","01010","01011","01100","01101","01110","01111",
"10000","10001","10011","10101","10110","10111","11000","11001",
"11010","11011","11100","11101","11110","11111"];
Run Code Online (Sandbox Code Playgroud)
感谢 Jack 的评论,这里是简短而有效的代码:
function findPattern(n) {
var oksubs = [n.substr(0,5),n.substr(0,4),n.substr(0,3)];
for(var i=0; i<oksubs.length; ++i) {
var sub = oksubs[i];
if((sub+sub+sub+sub).substr(0,10)==n) return sub;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2050 次 |
| 最近记录: |