Bir dizge alan bir işlev oluşturmalıyım ve geri dönmeli trueveya falsegirdinin tekrarlanan bir karakter dizisinden oluşup oluşmadığına bağlı. Verilen dizenin uzunluğu her zaman değerinden daha büyüktür 1ve karakter dizisinin en az bir tekrarı olmalıdır.
"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)
Aşağıdaki işlevi oluşturdum:
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
Bunu kontrol etmek gerçek sorunun bir parçasıdır. Böyle verimli olmayan bir çözümü karşılayamam. Her şeyden önce, dizenin yarısından geçiyor.
İkinci sorun, replace()her döngüde onu yavaşlatan kullanmasıdır. Performansla ilgili daha iyi bir çözüm var mı?