返回

揭秘算法面试新宠:场景八股文下的 LeetCode 535 详解

后端

LeetCode 535:解密算法面试中的“场景八股文”

在算法面试的丛林中,LeetCode 535 题以其独特的“场景八股文”形式脱颖而出,成为新晋宠儿。它不仅考验着算法能力,更拷问着对场景的理解和灵活运用。在这篇博文中,我们将深入剖析 LeetCode 535 题的题意、解题思路和代码实现,助你轻松过关!

一、题意解析:TinyURL 的加密与解密

TinyURL 是一种 URL 简化服务,能够将冗长的 URL 化身为易于记忆和分享的短链接。LeetCode 535 题的任务就是让你实现 TinyURL 的加密和解密功能。

1. 加密:

  • 给定一个原始 URL,将它加密成独一无二的短链接。
  • 加密算法必须确保即使相同原始 URL 输入多次,也能生成不同的短链接。
  • 短链接应尽可能短,方便记忆和分享。

2. 解密:

  • 给定一个加密后的短链接,将它还原成原始的 URL。
  • 解密后的 URL 必须与原始 URL 完全一致。
  • 解密过程必须高效,即使面对海量短链接也能快速完成。

二、解题思路:哈希表 + 随机字符串

LeetCode 535 题的解题思路分为两大块:

1. 加密:

  • 使用哈希表存储原始 URL 与加密后短链接的对应关系。
  • 为每个原始 URL 生成一个随机字符串作为短链接。
  • 将原始 URL 和生成的短链接存入哈希表。

2. 解密:

  • 给定一个短链接,在哈希表中查找对应的原始 URL。
  • 若找到,则返回原始 URL。
  • 若未找到,则说明该短链接无效,返回错误信息。

三、代码实现:Python 示例

import hashlib
import string

class TinyURL:
    def __init__(self):
        self.hash_table = {}

    def encode(self, long_url):
        hash_value = hashlib.sha256(long_url.encode('utf-8')).hexdigest()
        short_url = self.generate_short_url(hash_value)
        self.hash_table[short_url] = long_url
        return short_url

    def generate_short_url(self, hash_value):
        alphabet = string.ascii_lowercase + string.ascii_uppercase + string.digits
        short_url = ""
        for i in range(6):
            index = int(hash_value[i], 16) % len(alphabet)
            short_url += alphabet[index]
        return short_url

    def decode(self, short_url):
        if short_url in self.hash_table:
            return self.hash_table[short_url]
        else:
            return "Invalid short URL"

四、总结与展望

LeetCode 535 题的“场景八股文”形式不仅检验了算法能力,还考量了对场景的理解和灵活运用。掌握了它的解题思路和技巧,将极大提升你在算法面试中的通过率。

未来,算法面试中“场景八股文”的应用可能会更加普遍。这不仅要求我们夯实算法基础,更需要具备灵活运用算法的能力,以及对实际场景的深入理解。希望本文能为你的算法面试之旅助力,祝你在求职路上旗开得胜!

常见问题解答

  1. 为什么使用哈希表?
    哈希表可以快速查找和插入键值对,对于存储原始 URL 与短链接的对应关系非常合适。

  2. 如何生成随机短链接?
    利用原始 URL 的哈希值,通过计算和字符集映射可以生成独一无二的随机短链接。

  3. 解密过程如何保证高效?
    通过哈希表快速查找短链接对应的原始 URL,可以确保高效的解密过程。

  4. 如何处理重复的原始 URL?
    即使输入相同的原始 URL 多次,也会生成不同的短链接,保证加密的唯一性。

  5. 如何扩展 TinyURL 服务?
    可以通过增加字符集长度、使用分布式哈希表等方法来扩展 TinyURL 服务,以应对海量 URL 的需求。