У меня есть проблема, которая требует преобразования строки в другую путем добавления к себе копий ее начального значения. Проблема позволяет удалять отдельные символы в некоторых местах.
Объяснение
let x = "abba"; // First string
let y = "aba" // Second initial string
y("aba") => remove last "a" => y("ab") => y+initialY = "ab"+"aba" =>
y("ababa") => remove char at index 2 => y("abba") => y == x => sucess
Мой алгоритм успешно решает задачу:
let x = "abbbbcccaaac"
let y = "abc"
let xArr = x.split('')
let yArr = y.split('')
let count = 0;
for (let i = 0; i < xArr.length; i++) {
if(yArr[i] == undefined) {
yArr = yArr.concat(y.split(''));
count++;
}
if(xArr[i] != yArr[i]) {
yArr.splice(i, 1);
i--;
}
}
console.log("Output is:", yArr.join(''))
console.log("Appends in order to transform:", count)
Алгоритм работает как задумано, однако я не уверен в его временной и пространственной сложности и, самое главное, в эффективности.
Является ли этот алгоритм временной сложностью
O(n)
, где n — длинаx
?Если это не
O(n)
, можно ли решить проблему заO(n)
времени?Изменяют ли
.concat()
,.splice()
или.split()
временную сложность, поскольку они вложены в цикл for? А если нет, то изменяют ли они временную сложность алгоритма и насколько?Учитывая правила этой задачи, является ли это эффективным способом ее решения?
Какова пространственная сложность этого алгоритма?