NC101. 压缩字符串(一)
描述
示例1
输入:
"aabcccccaaa"
输出:
"a2bc5a3"
示例2
输入:
"shopeew"
输出:
"shope2w"
C 解法, 执行用时: 4ms, 内存消耗: 520KB, 提交时间: 2022-04-28
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param param string字符串 * @return string字符串 * * C语言声明定义全局变量请加上static,防止重复定义 * * C语言声明定义全局变量请加上static,防止重复定义 */ char* compressString(char* param ) { // write code here if (param == NULL) return NULL; int i,j,k; int len = strlen(param); i = 0; k = 0; while (i < len) { for (j = i; j < len; j++) { if (param[j] != param[i]) break; } int size = j - i; param[k++] = param[i]; if (size > 1 && size < 10) { param[k++] = size + '0'; } else if (size >= 10) { int tmp = k + (int)log10(size); int limit = k; k = tmp + 1; while (tmp >= limit) { param[tmp--] = size % 10 + '0'; size /= 10; } } i = j; } param[k] = '\0'; return param; }
C 解法, 执行用时: 4ms, 内存消耗: 536KB, 提交时间: 2022-07-23
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param param string字符串 * @return string字符串 * * C语言声明定义全局变量请加上static,防止重复定义 */ int int2str(int n,char* res){ char temp[6],i=6; while(n){ temp[--i] = n%10 +0x30; n /= 10; } memcpy(res,temp+i,6-i); return 6-i; } char* compressString(char* param ) { // write code here int cnt=1; int len = strlen(param); if(len == 0) return param; char* res = (char*)malloc(len+1); memset(res,0,len+1); int p=0; for(int i=1;i<len;i++){ if(param[i] == param[i-1]){ cnt++; } else{ res[p++] = param[i-1]; if(cnt>1){ p += int2str(cnt, res+p); } cnt=1; } } res[p++] = param[len-1]; if(cnt>1){ p += int2str(cnt, res+p); } return res; }
C 解法, 执行用时: 4ms, 内存消耗: 652KB, 提交时间: 2022-01-10
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param param string字符串 * @return string字符串 * * C语言声明定义全局变量请加上static,防止重复定义 */ char* compressString(char* param ) { int len=strlen(param); static char res_char[5001000]="\0"; int index=0,j=1; res_char[0]=param[0]; int count=1; for(int i=0;i<len;i++){ if(param[i]==param[i+1]&¶m[i+1]!='\0'){ count++; } else{ if(count!=1&&count<10){ res_char[j++]=count+'0'; } if(count>=10){ char str[10]={0},k=0; while(count>=10){ str[k++]=count%10+'0'; count=count/10; } str[k]=count+'0'; for(int p=k;p>=0;p--){ res_char[j++]=str[p]; } } res_char[j++]=param[i+1]; count=1; } } return res_char; }
C++ 解法, 执行用时: 4ms, 内存消耗: 676KB, 提交时间: 2021-09-12
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param param string字符串 * @return string字符串 */ string compressString(string param) { // write code here int l=0,r=0; int sum=1; char tar,now; tar=param[l]; string ans; while(r<param.size()){ now=param[++r]; if(now==tar) ++sum; else{ ans+=tar; if(sum>1) ans+=to_string(sum); tar=now; sum=1; } } return ans; } };
C++ 解法, 执行用时: 4ms, 内存消耗: 688KB, 提交时间: 2022-07-24
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param param string字符串 * @return string字符串 */ string compressString(string param) { // write code here int index = 0; string result; int n = param.size(); while(index < n){ int i = index; while(i < n && param[i] == param[index]){ i++; } int number = i - index; if(number == 1){ result += param[index]; } else{ result += (param[index] + to_string(number)); } index = i; } return result; } };