DEV Community

Anushadevi Rajkumar
Anushadevi Rajkumar

Posted on

[1] Algorithm Showdown: Python vs. JavaScript - Group Anagrams

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"]]
Enter fullscreen mode Exit fullscreen mode

🐍 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())
Enter fullscreen mode Exit fullscreen mode

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());
}
Enter fullscreen mode Exit fullscreen mode

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)