贴原题:
Now you are given a string S, which represents a software license key which we would like to format. The string S is composed ofalphanumerical characters and dashes. The dashes split the alphanumerical characters within the string into groups. (i.e. if there are M dashes, the string is split into M+1 groups). The dashes in the given string are possibly misplaced.
We want each group of characters to be of length K (except for possibly the first group, which could be shorter, but still must contain at least one character). To satisfy this requirement, we will reinsert dashes. Additionally, all the lower case letters in the string must be converted to upper case.
So, you are given a non-empty string S, representing a license key to format, and an integer K. And you need to return the license key formatted according to the description above.
Example 1:
Input: S = “2-4A0r7-4k”, K = 4
Output: “24A0-R74K”
Explanation: The string S has been split into two parts, each part has 4 characters.
Example 2:
Input: S = “2-4A0r7-4k”, K = 3
Output: “24-A0R-74K”
Explanation: The string S has been split into three parts, each part has 3 characters except the first part as it could be shorter as said above. Note: The length of string S will not exceed 12,000, and K is a positive integer. String S consists only of alphanumerical characters (a-z and/or A-Z and/or 0-9) and dashes(-). String S is non-empty.
解析:
本题是给出一个由连接符(即减号-)、数字和大小写字母组成的字符串,以及一个数K。要求我们以K个元素为一组,每一组之间以连接线做分割,除了第一组可能更短,但仍然必须包含至少一个字符。此外还需要把小写字母转化成大写字母。
我的思路是先计算字符串中除去连接符以外的元素个数,再由这个长度和给出的K计算出第一组的长度,把第一组单独处理,剩下的就很简单了——每隔K个非‘-’字符为一组,每一组间添加一个‘-’。具体看下面程序——
贴C代码:
char* licenseKeyFormatting(char* S, int K) {int prilen=strlen(S);int len=0;for(int i=0; iif(*(S+i)!='-'){len++;}}int relen=2*len;char *ch=(char *)malloc(relen*sizeof(char));int firlen=len%K;int j=0;int i=0;int y=0;for(; j