自学内容网 自学内容网

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)!