考完试了,我又回来开始更新了!!!如果觉得写得不错的话,可以给作者一个点赞或者关注哦!(思路借鉴,代码实写)
结果一上来我就调了一个多小时才通,可能不是最优解法,仅供参考。
解题思路
1.先将字符串中的‘-’去掉,之后将小写字母转为大写字母保存到a中。
2.用a的长度除以k,如果=0的话,就每隔k个加一个‘-’。如果!=0的话,
前面剩下的num是一组,后面正常每隔k个加‘-’。
C语言代码实现
如果有看不懂的地方欢迎留言!
char * licenseKeyFormatting(char * s, int k){
int i,j;
j=0;
int len=strlen(s);
char*a=(char*)malloc(sizeof(char)*len+1);
char* ret;
if(len==1){
if(s[0]>=97&&s[0]<=122){
s[0]=s[0]-32;
}else if(s[0]=='-'){
return "";
}
return s;
}
for(i=0;i<len;i++){
if(s[i]!=45){
a[j]=s[i];
j++;
} else if(s[i+1]!=45){
a[j]=s[i+1];
i++;
j++;
}
}
a[j]='\0';
int lena=strlen(a);
for(i=0;i<lena;i++){
if(a[i]>=97&&a[i]<=122){
a[i]=a[i]-32;
}
}
int num=lena%k;
if(s[len-1]=='-'){
int num=(lena-1)%k;
}
if(num==0){
int space=(lena/k)-1;
ret=(char*)malloc(sizeof(char)*(lena+space+1));
j=0;
for(i=0;i<lena;i++){
ret[j]=a[i];
j++;
if(k==1&&i!=lena-1||i!=0&&(i+1)%k==0&&i!=lena-1){
ret[j]='-';
j++;
}
}
ret[j]='\0';
}
if(num!=0){
int space=(lena/k);
j=0;
ret=(char*)malloc(sizeof(char)*(lena+space+1));
for(i=0;i<lena;i++){
ret[j]=a[i];
j++;
if(i+1==num){
ret[j]='-';
j++;
continue;
}
if(i!=0&&(i+1)%k==num&&i!=lena-1){
ret[j]='-';
j++;
}
}
ret[j]='\0';
}
return ret;
}
|