Нужно ли умножать сложности?
Нет. Вот если бы у тебя было два вложенных цикла по string, то да. А тут сложность "складывается", потому что сначала O(n) — реверс, потом O(n) — создание цикла, потом O(n) — join. Но т.к. константы в сложности никому не нужны — это только O(n)
Но ты, конечно, не поверишь, поэтому вот тебе доказательство. Время линейно растёт вместе с N
Если я правильно понимаю, то reversed будет только один раз. Псевдокодом можно записать это так:newStr = reversed(string);
for sym in newStr; // ..
То есть тут дважды используется линейный проход, а не линейный внутри линейного, а значит умножать не нужно - сложность линейная.