I’ve been revisiting data structures and algorithms lately, but I with a twist to my brain this time: I’m tackling each problem in two different languages to see how they compare. 👾
Welcome to the first post in this series, where I solve the same coding problem in both Python and JavaScript - and discuss about what stands out in each.
[LC-49] Group Anagrams
Problem
Given an array of strings, group all anagrams together. Anagrams are words formed by rearranging letters of another word.
Input: ["eat","tea","tan","ate","nat","bat"]
Output: [["bat"],["nat","tan"],["ate","eat","tea"]]
🐍 Python Approach
from collections import defaultdict
def group_anagrams(strs):
    result = defaultdict(list)
    for s in strs:
        # Count character frequency
        count = [0] * 26
        for char in s:
            count[ord(char) - ord('a')] += 1
        # Use tuple as hash key
        key = tuple(count)
        result[key].append(s)
    return list(result.values())
Python learnings: 🖊️
- 
defaultdict(list)eliminates key existence checks
- 
tuple(count)is naturally hashable
🟨 JavaScript Approach
function groupAnagrams(strs) {
    const result = new Map();
    for (let s of strs) {
        // Count character frequency
        const count = new Array(26).fill(0);
        for (let char of s) {
            count[char.charCodeAt(0) - 'a'.charCodeAt(0)]++;
        }
        // Convert array to string for hashing
        const key = count.join(',');
        if (!result.has(key)) {
            result.set(key, []);
        }
        result.get(key).push(s);
    }
    return Array.from(result.values());
}
JavaScript learnings: 🖊️
- Manual key existence validation is required
- Array needs string conversion for Map keys
📊 Key Takeaways
| Python | JavaScript | |
|---|---|---|
| Hash Key | tuple(count) | count.join(',') | 
| Default Values | defaultdict | Manual checks | 
Performance: Both are O(n×m) time, O(n×m) space
Comment with the quirks or features you find most distinctive in Python and JavaScript. Or your take on this DSA problem!
 

 
    
Top comments (0)