返回

字节跳动算法面试题: 揭秘替换空格背后

见解分享

简介

在字符串处理中,替换空格是一个常见而基础的问题。字节跳动等科技巨头在算法面试中经常考察这类题目,旨在考察应聘者的字符串操作能力和算法思维。

题目

字节跳动算法面试题 05 的题目如下:

实现一个函数,把字符串 s 中的每个空格替换成 "%20"。

解题思路

这道题目的解法很简单,我们可以逐个字符遍历字符串 s,判断当前字符是否为空格。如果是空格,则将 "%20" 赋值给结果字符串;否则,将当前字符赋值给结果字符串。

def replace_space(s: str) -> str:
  """
  将字符串中的空格替换为 "%20"。

  Args:
    s (str): 输入字符串。

  Returns:
    str: 替换后的字符串。
  """

  result = ""
  for char in s:
    if char == " ":
      result += "%20"
    else:
      result += char

  return result

实现细节

在上面的 Python 实现中,我们使用了 for 循环逐个遍历字符串中的每个字符。对于每个字符,我们使用 if 语句判断它是否为空格。如果是,我们使用 += 操作符将 "%20" 追加到结果字符串 result 中;否则,我们使用 += 操作符将当前字符追加到 result 中。

优化建议

为了提高代码的效率,我们可以提前计算字符串 s 中空格的数量,然后分配适当长度的结果字符串。这可以避免在结果字符串中重复分配内存。

def replace_space_optimized(s: str) -> str:
  """
  将字符串中的空格替换为 "%20"。

  Args:
    s (str): 输入字符串。

  Returns:
    str: 替换后的字符串。
  """

  # 计算空格数量
  space_count = s.count(" ")

  # 分配结果字符串
  result = [None] * (len(s) + space_count * 2)

  # 逐个字符遍历
  i, j = 0, 0
  while i < len(s):
    if s[i] == " ":
      result[j] = "%"
      result[j + 1] = "2"
      result[j + 2] = "0"
      j += 3
    else:
      result[j] = s[i]
      j += 1
    i += 1

  return "".join(result)

总结

替换空格问题是字节跳动算法面试中的一道常见题目。通过掌握这道题目的解题思路和实现方法,可以帮助应聘者在面试中脱颖而出。本文不仅提供了详细的解法讲解,还提供了优化建议,让读者能够更深入地理解字符串处理的精髓。