Still using dictionaries but in a simpler fashion this is O(n^2)
def count_freq(name):
x = dict()
name = name.replace(' ', '')
for i in name:
if i in x.keys():
x[i] += 1
else:
x[i] = 1
b = [f"{k}-{v}" for k, v in x.items()]
print(",".join(b))
name = input("Please insert your input: ")
count_freq(name)
Here's a O(n) solution in a beginner's fashion:
def count_freq(name):
x = dict()
name = name.replace(' ', '')
for i in name:
try:
x[i] += 1
except:
x[i] = 1
b = [f"{k}-{v}" for k, v in x.items()]
print(",".join(b))
name = input("Please insert your input: ")
count_freq(name)
Execution time analysis:
#input is 'marcel bentok tanaka'
#string format no-print
theo 9 µs ± 1.37 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)
**vn2 4.39 µs ± 157 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)**
vn 6.78 µs ± 1.34 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)
#no string format (counts only)
theo 5.74 µs ± 953 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
**vn2 2.42 µs ± 30 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)**
vn 3.66 µs ± 668 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
#input is a really long text
#string format no-print
theo 20.8 µs ± 1.43 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)
vn2 106 µs ± 21.9 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
**vn 6.06 µs ± 1.04 µs per loop (mean ± std. dev. of 7 runs, 100000 loops each)**
#no string format (counts only)
theo 16.6 µs ± 576 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
vn2 83 µs ± 21.2 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)
**vn 3.22 µs ± 197 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)**