Can any one explain for 2003C - Turtle and Good Pairs, why PyPy3-64 is being slower here 278391142 and getting TLE and also the memory limit, when the same code works fine with Python3 here 278391153. Thought PyPy always works faster than Python, what am I missing?
import sys
input = lambda: sys.stdin.readline().strip()
for _ in range(int(input())):
n = int(input())
s = input()
a = [0] * 26
for i in range(n):
a[ord(s[i]) - ord('a')] += 1
res = ""
while True:
tempval = 0
for i in range(26):
if a[i] != 0:
res += chr(i + ord('a'))
a[i] -= 1
tempval = 1
if tempval == 0:
break
print(res)
Never faced such issue till now with PyPy3-64 :( Any help from experienced python coders, I'd be greatful!
Auto comment: topic has been updated by vsvg (previous revision, new revision, compare).
it's better to use
res
as a list, then.append
each char to it. Thenprint(''.join(res))
.reason:
list.append
takes $$$\mathcal{O}(1)$$$, whilestring
concatenation takes $$$\mathcal{O}(len(s))$$$Yeah, I've realized this after the contest and would not repeat such mistake later. But I've just been thinking if it passes with Python3, why didnt it with Pypy!