### re: Daily Challenge #3 - Vowel Counter VIEW POST

Thinking the string as a Set with O(1) for look up operations: solution is O(n), where n = len(str)

``````def count_vowels(str):
vowels = "aeiouAEIOU"
count = 0
for c in str:
if c in vowels:
count += 1
return count;
``````

JS lambda way

``````conat vowels = new Set("aeiouAEIOU");
const counVowels = input => [...input].reduce((total, current) => (total += vowels.has(current)), 0);
``````

I don't think so. Consider pseudocode like this:

``````if (letter == 'a' ||
letter == 'e' ||
letter == 'i' ||
letter == 'o' ||
letter == 'u') {
vowels += 1;
}
``````

Given the character `'u'`, it would do 5 comparisons, where the worst case for a binary tree would be 3. Cases where the letter isn't a vowel will involve 5 checks as well.

Edit: fixed the number of comparisons.

You also have to traverse the tree to get to the next letter. But I see what you mean. Only counting equality checks, hard-coding behaves like a linear search. My bad.

I think you might still be missing Brian's point that a hash set has O(1) lookup time, which is faster than the tree set's O(log n).

(On paper. Real-world implementations vary. e.g. Ruby's hashes just do linear search at this size.)

code of conduct - report abuse  