Единственное верная оценка это O(N * L * log L), где L это длина строки.
А дальше в зависимости от соотношения N и L можно эту оценку как-то упрощать и переоценивать. Может это O(N) если на самом деле L ограничено константой. Или наоборот O(L * log L), если N константа и т. п., но нам для такой оценки не хватает данных.
А во втором примере у вас вообще не эквивалентный код.
В оригинале TS понимает, что если первый аргумент строка, то функция вернёт строку, а если число, то вернёт число. Ваш же код всегда возвращает строку-или-число.
Т.е. у вас выражение SumOrConcat(1, 2) * 3 не скомпилируется с ошибкой, что строки нельзя умножать.
Вернее даже, а вы поняли что вообще поизошло в первом присваивании?
Рекомендую после него написать console.log(arnold, code, academy) и осознать что именно поменялось.
res2001
> Может это эти онлайн кодеры не поддерживают UTF8?
Скорее наоборот, онлайн кодеры поддерживают UTF8, а автор кодирует UTF16.
HamsterGamer
> "кол-во символов" * "размер символа в байтах"
это выражение не имеет смысла для UTF8 в котором размер символа в байтах может быть от 1 до 6.