License Key Formatting,LeetCode,482

题目描述(LeetCode 482):License Key Formatting

你有一个密钥字符串 S,其中包含字母、数字和短划线 -。你需要将这个字符串重新格式化为一个由字母和数字组成的字符串,并且每 K 个字符之间用短划线分隔。

具体要求如下:

  1. 字符串 S 中只包含字母(大写和小写)、数字和短划线 -
  2. 你需要将 S 中的短划线去掉,并将剩余的字符重新格式化。
  3. 格式化后的字符串中,每 K 个字符之间用短划线分隔,最后一个分组可能不满 K 个字符。

示例:

输入:S = "5F3Z-2e-9-w", K = 4

输出:"5F3Z-2E9W"

解释:字符串 S 中的短划线被去掉,剩余的字符按每 4 个一组重新格式化,得到 "5F3Z-2E9W"

解题思路:

  1. 去除短划线:首先将字符串 S 中的所有短划线去掉。
  2. 反转字符串:为了方便从后往前每 K 个字符分组,可以将字符串反转。
  3. 分组并添加短划线:从反转后的字符串开始,每 K 个字符一组,添加短划线。
  4. 再次反转:将分组后的字符串再次反转,得到最终结果。

代码实现(Python):

class Solution: def licenseKeyFormatting(self, S: str, K: int) -> str:

去除短划线并转换为大写

    S = S.replace('-', '').upper()

    # 反转字符串
    S = S[::-1]

    # 分组并添加短划线
    result = []
    for i in range(0, len(S), K):
        result.append(S[i:i+K])

    # 再次反转并连接成最终结果
    formatted_key = '-'.join(result)[::-1]

    return formatted_key

示例使用

sol = Solution() print(sol.licenseKeyFormatting("5F3Z-2e-9-w", 4)) # 输出: "5F3Z-2E9W"

详细解释:

  1. 去除短划线并转换为大写S = S.replace('-', '').upper() 这一步将输入字符串中的所有短划线去掉,并将所有字符转换为大写,以便统一格式。
  2. 反转字符串S = S[::-1] 反转字符串是为了方便从后往前每 K 个字符进行分组。
  3. 分组并添加短划线result = [] for i in range(0, len(S), K): result.append(S[i:i+K]) 通过循环,每 K 个字符一组,将分组后的字符串添加到结果列表中。
  4. 再次反转并连接成最终结果formatted_key = '-'.join(result)[::-1] 将分组后的字符串列表用短划线连接起来,并再次反转,得到最终的格式化后的密钥字符串。

这种方法的时间复杂度为 O(N),其中 N 是字符串 S 的长度,空间复杂度也为 O(N),主要用于存储中间结果和最终结果。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注