C语言 | Leetcode C语言题解之第482题秘钥格式化
题目:
题解:
char *licenseKeyFormatting(char *s, int k)
{
int n = strlen(s);
int count = 0;
// 先提取破折号的个数
for (int i = 0; i < n; i++) {
if (s[i] == '-') {
count += 1;
}
}
// 分配空间
char *res = (char*)malloc(sizeof(char) * (n + n / k + 2 - count));
// tmp: 表示若第一组不能达到k个字符的长度
int tmp = (n - count) % k;
int index = 0;
// 记录当前已存放进的字母的个数
int cur = 0;
for (int j = 0; j < n; j++) {
char ch = s[j];
if (s[j] == '-') {
continue;
} else if (ch >= 'a' && ch <= 'z') { // 小写转大写
ch = ch - 'a' + 'A';
}
// 判断添加破折号的条件
// cur - tmp: 表示除去第一组的当前已添加字母数
// tmp != 0: 避开恰好完全分组 k 个字符的情况
if (tmp != 0 && (index == tmp || (cur - tmp) % k == 0)) {
res[index] = '-';
index += 1;
}
// 添加字母
res[index] = ch;
index += 1;
cur += 1;
}
res[index] = '\0';
return res;
}
原文地址:https://blog.csdn.net/m0_59237910/article/details/142968491
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!