482. License Key Formatting(密钥格式化)

本文介绍了一个编程问题,如何根据给定的许可密钥字符串s和整数k,移除破折号,将小写字母转换为大写,并按照每组k个字符(第一组可短于k)重新组织字符串。代码示例展示了这个过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

给定一个许可密钥字符串 s,仅由字母、数字字符和破折号组成。字符串由 n 个破折号分成 n + 1 组。你也会得到一个整数 k 。

我们想要重新格式化字符串 s,使每一组包含 k 个字符,除了第一组,它可以比 k 短,但仍然必须包含至少一个字符。此外,两组之间必须插入破折号,并且应该将所有小写字母转换为大写字母。

返回 重新格式化的许可密钥 。

根据问题描述

我们需要删除原字符串中的所有’-‘,然后根据新得到的字符串从末尾向前进行划分,每个k个字符重新添加’-‘,根据这种规则我们可以很方便的得到代码,但是需要注意特殊情况——原字符串去掉’-'之后得到的是空串,这种情况直接返回空串就行。

代码

char* licenseKeyFormatting(char* s, int k) {
    int length=0;
    for(;s[length]!='\0'; length++);
    int s_length = length;
    for(int i=0; s[i]!='\0'; i++){
        if(s[i]=='-'){
            length--;
        }else if(s[i]>='a'&&s[i]<='z'){
            s[i] = s[i] - 'a' + 'A';
        }
    }
    char *answer = NULL;
    if(length>0){
    int nums_group = length/k+(length%k+k-1)/k-1;
    answer = (char *)malloc(sizeof(char)*(length+nums_group+1));
    answer[length+nums_group] = '\0';
    int count = 0;
    int index = length+nums_group-1;
        for(int i=s_length-1; i>=0; i--){
            if(s[i]!='-'){
                answer[index--] = s[i];
                count++;
                if(count==k&&index>=0){
                    count = 0;
                    answer[index--] = '-';
                }
            }
        }
    }else{
        answer = (char *)malloc(sizeof(char));
        answer[0] = '\0';
    }
    return answer;
}

提交结果截图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值