Código JS-
let N=7 let S="bab" let arr=["a","b"] for(i=2;i<N;i++){ //constructing a fibonnaci series let item=arr[i-1]+arr[i-2] arr.push(item) } // console.log(arr[N-1]) // babbababbabba let marr=arr[N-1] let str = new RegExp(S, "g"); let result=marr.match(str) let answer=(result.length) console.log(answer) // gives answer as 3 , but correct is 4La tarea en cuestión era construir primero una serie de fibonnaci donde f1="a" y f2="b", de 3 en adelante f3=f2+f1 y f4=f3+f2 Luego tenemos que hacer coincidir la cadena S para ver cuántas veces ocurre en la fN. Mi código funciona bien para el resto de los casos de prueba pero para N=7 y S="bab" , la respuesta correcta es 4 pero mi código dice 3.
Inspirado por esta respuesta, no puede hacer esto con una sola expresión regular, pero puede hacer esto:
let results = []; let match; let N=7 let pat = /(?=(bab))\w/g; let arr=["a","b"] for(i=2;i<N;i++){ //constructing a fibonnaci series let item=arr[i-1]+arr[i-2] arr.push(item) } // console.log(arr[N-1]) // babbababbabba let marr=arr[N-1] while ( (match = pat.exec( marr ) ) != null ) { results.push( match[1] ); } console.log(results.length);Captura los tres dígitos dentro de la anticipación, luego retrocede y hace coincidir un carácter de la manera normal solo para avanzar en la posición de coincidencia.