Muszę utworzyć funkcję, która przyjmuje ciąg znaków i powinna zwracać truelub w falseoparciu o to, czy dane wejściowe składają się z powtarzającej się sekwencji znaków. Długość podanego ciągu jest zawsze większa niż, 1a sekwencja znaków musi mieć co najmniej jedno powtórzenie.
"aa" // true(entirely contains two strings "a")
"aaa" //true(entirely contains three string "a")
"abcabcabc" //true(entirely containas three strings "abc")
"aba" //false(At least there should be two same substrings and nothing more)
"ababa" //false("ab" exists twice but "a" is extra so false)
Stworzyłem poniższą funkcję:
function check(str){
if(!(str.length && str.length - 1)) return false;
let temp = '';
for(let i = 0;i<=str.length/2;i++){
temp += str[i]
//console.log(str.replace(new RegExp(temp,"g"),''))
if(!str.replace(new RegExp(temp,"g"),'')) return true;
}
return false;
}
console.log(check('aa')) //true
console.log(check('aaa')) //true
console.log(check('abcabcabc')) //true
console.log(check('aba')) //false
console.log(check('ababa')) //false
Sprawdzenie tego jest częścią prawdziwego problemu. Nie stać mnie na takie nieefektywne rozwiązanie. Po pierwsze, przechodzi przez połowę łańcucha.
Drugi problem polega na tym, że używa replace()w każdej pętli, co powoduje jej powolność. Czy istnieje lepsze rozwiązanie dotyczące wydajności?