LeetCode 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. 山羊拉丁文 | 简单 | 字符串处理 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!