Implement hostname-restricted web crawler
Company: Anthropic
Role: Software Engineer
Category: Coding & Algorithms
Difficulty: medium
Interview Round: Technical Screen
Quick Answer: This question evaluates skills in graph traversal and cycle detection, hostname-based filtering, URL parsing, and basic network error handling. Commonly asked in Coding & Algorithms interviews, it assesses algorithmic reasoning about traversal strategy and complexity (time and space) analysis while balancing conceptual understanding with practical implementation details.
Constraints
- 0 <= len(web) <= 10^4
- The total number of hyperlinks across all lists in web is at most 2 * 10^5
- All URLs in test cases are absolute URL strings, but some discovered URLs may be missing from web to simulate request failures
- The crawler must be single-threaded and must not fetch any URL whose hostname differs from the hostname of startUrl
Examples
Input: ('http://a.com', {'http://a.com': ['http://a.com/about', 'http://b.com/out'], 'http://a.com/about': [], 'http://b.com/out': ['http://a.com/hidden'], 'http://a.com/hidden': []})
Expected Output: ['http://a.com', 'http://a.com/about']
Explanation: The crawler visits the start page and http://a.com/about. It must not fetch http://b.com/out because the hostname differs, so http://a.com/hidden is never discovered.
Input: ('http://news.com', {'http://news.com': ['http://news.com/a', 'http://news.com/b', 'http://news.com/a'], 'http://news.com/a': ['http://news.com', 'http://news.com/b'], 'http://news.com/b': ['http://news.com/c'], 'http://news.com/c': ['http://news.com/a']})
Expected Output: ['http://news.com', 'http://news.com/a', 'http://news.com/b', 'http://news.com/c']
Explanation: There are duplicate links and a cycle, but each same-host URL is fetched at most once because of the visited set.
Hints
- Use a queue and a visited set. The queue gives you an iterative BFS, and the visited set prevents duplicate fetches and infinite loops.
- Compare only the parsed hostname component, not the whole URL string. Two URLs with different schemes or ports can still belong to the same hostname.