LeetCode 482. 密钥格式化

题目描述

482. 密钥格式化

思路分析

解法一:从后向前分组(推荐)

核心思路

  • 逆序遍历字符串,跳过 -,每累积 k 个字符就在结果中加入 -
  • 将字母统一转换为大写。
  • 最后反转得到答案,避免处理首组长度问题。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示字符串长度。
  • 空间复杂度:O(n),需要构造结果字符串。
class Solution {
    public String licenseKeyFormatting(String s, int k) {
        StringBuilder sb = new StringBuilder();
        int count = 0;

        for (int i = s.length() - 1; i >= 0; i--) {
            char ch = s.charAt(i);
            if (ch == '-') {
                continue;
            }

            if (count == k) {
                sb.append('-');
                count = 0;
            }

            sb.append(Character.toUpperCase(ch));
            count++;
        }

        return sb.reverse().toString();
    }
}
func licenseKeyFormatting(s string, k int) string {
	buf := make([]byte, 0, len(s))
	count := 0

	for i := len(s) - 1; i >= 0; i-- {
		ch := s[i]
		if ch == '-' {
			continue
		}

		if count == k {
			buf = append(buf, '-')
			count = 0
		}

		if ch >= 'a' && ch <= 'z' {
			ch = ch - 'a' + 'A'
		}
		buf = append(buf, ch)
		count++
	}

	// 反转
	for i, j := 0, len(buf)-1; i < j; i, j = i+1, j-1 {
		buf[i], buf[j] = buf[j], buf[i]
	}

	return string(buf)
}

相似题目

题目 难度 考察点
415. 字符串相加 简单 字符串模拟
67. 二进制求和 简单 字符串处理
58. 最后一个单词的长度 简单 字符串遍历
344. 反转字符串 简单 双指针
824. 山羊拉丁文 简单 字符串处理
本文作者:
本文链接: https://hgnulb.github.io/blog/2022/42396601
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!