482. License Key Formatting

406 篇文章 0 订阅
406 篇文章 0 订阅

1,题目要求
You are given a license key represented as a string S which consists only alphanumeric character and dashes. The string is separated into N+1 groups by N dashes.

Given a number K, we would want to reformat the strings such that each group contains exactly K characters, except for the first group which could be shorter than K, but still must contain at least one character. Furthermore, there must be a dash inserted between two groups and all lowercase letters should be converted to uppercase.

Given a non-empty string S and a number K, format the string according to the rules described above.
这里写图片描述
将一个用’-‘分割的字符串划分为给定组长度的字符串,其中,第一个块的长度可以不是给定长度。
字符串由数字和字母组成,要求输出的字符串全部由大写字母组成。

2,题目思路
首先,字符大小写转换可以用自带的函数来实现,也可以用ASCII的方式来实现(大写字母比小写字母的ASCII值小了32)。
普通的办法,就是先对字符串进行遍历,然后去掉”-“后,根据给定的K值来对”-“进行重新安排。
需要注意的是,因为第一个块没有长度限制,如果对其进行单独处理,虽然也可以做到,但是比较繁琐。
简便的办法就是从后往前进行字符串的遍历和处理。

3,程序源码

class Solution {
public:
    string licenseKeyFormatting(string S, int K) {
        string res = "";
        for(auto a = S.rbegin();a<S.rend();a++)
        {
            if(*a !='-')
            {
                if(res.size()%(K+1) == K)
                    res += "-";
                res += toupper(*a);
            }
        }
        reverse(res.begin(), res.end());
        return res;
    }
};

rbegin() 和 rend()迭代器是一个指针,因此在调用时需要按照指针的方式进行使用。
作用是从后往前进行迭代。

 if(res.size()%(K+1) == K)

关于这一点,首先,因为如果给定的值为K(假如为2),那么每两个字符中间就要插入一个”-“,因此在求余时,就要mod K+1而不是K。
其次,之所以是 == K 而不是 ==0,是由于如果 ==0,会使得res的长度为0(初始),也会加入一个’-‘,也就是会在开头(实质上是尾部)加入一个错误’-‘,因此需要 ==K来解决这一问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值