Ich muss eine Funktion erstellen, die eine Zeichenfolge akzeptiert, und sie sollte zurückgegeben werden true
oder darauf false
basieren, ob die Eingabe aus einer wiederholten Zeichenfolge besteht. Die Länge der angegebenen Zeichenfolge ist immer größer als 1
und die Zeichenfolge muss mindestens eine Wiederholung haben.
"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)
Ich habe die folgende Funktion erstellt:
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
Dies zu überprüfen ist Teil des eigentlichen Problems. Ich kann mir eine solche nicht effiziente Lösung nicht leisten. Zuallererst durchläuft es die Hälfte der Saite.
Das zweite Problem ist, dass es replace()
in jeder Schleife verwendet wird, was es langsam macht. Gibt es eine bessere Lösung für die Leistung?